我已经为牙科诊所开发了一个应用程序,它可以在一天的预设时间发送自动电子邮件和短信提醒。这将是安装在客户机上的本地php应用程序,因为数据库是本地的。我想把它作为月度订阅服务。为了实现订阅逻辑,我的想法是在我的服务器上保留一个文本文件,该文件将有一个到期日期。本地应用程序将读取文本文件的内容以确保订阅未过期。
现在的问题是,当我在我的脚本中使用file()或file_get_contents()函数来读取我服务器上的文本文件时(例如,www.abcde.com / demo.txt),它会永远被读取文本文件。现在,如果我直接将文本文件的url放在单独的浏览器窗口中,它会立即打开它。一旦我这样做,PHP脚本工作正常。过了一会儿,同样的循环开始了。
我的php应用程序是使用wamp服务器的“本地”。
答案 0 :(得分:0)
如果我理解你的意思,你想为这些消息创建一个订阅系统吗?
您可以在数据库中使用3个cols的新表:id,client_id,sub_time
看起来很容易检查客户端是否仍然是我认为的消息的订阅者。你只需要比较sub_time和当前时间,看看是否($ sub_time + 3600 * 24 * $ nb_of_day_in_last_month)> = $ current_time,或类似的......:D
答案 1 :(得分:0)
所以,我所拥有的新方法是这个,希望它能为你工作
例如文件名为:subscribes.txt(我使用',''分隔符,你可以根据它改变它)
; a comment line
43,1404399704
75,1404406800
104,1404399200
6,1404399500
小脚本
$file = 'subscribes.txt';
$delim= ','; // set the delimitor of your cols
$time = time(); // get time to use it in all the script
// this part is to get the last month number of days
$y = date('Y'); // year
$lm = date('n') - 1; // last month
$y = ($lm == 0) ? $y - 1 : $y; // if we are in jan., year - 1
$lm = ($lm == 0) ? 12 : $lm; // if we are in jan., last month was dec.
$lm = mktime( 0, 0, 0, $lm, 1, $y ); // so, the last month
$lm_days = intval(date("t",$lm)); // get the number of days in last month
// you can get the current month number of days with :
// $lm_days = intval(date('t'));
// end of the part
$file = file_get_contents($file); // read file content
$file = explode(PHP_EOL, $file); // transform it in array
foreach( $file as $lk => $line ){
if( !empty($line) && !preg_match('/^;(.*)/', $line) ){ // if line not empty and don't start with ;
$cid= null;
$st = null;
list($cid,$st) = explode($delim, trim($line)); // explode the 3 cols of the line
$st = $st + 3600*24*$lm_days;
if( $time >= $st ){
// send notifications etc etc ... (eg: your script)
}
else{
// else we will delete the line to light the file
unset($file[$lk]);
}
}
}
// once done, letz write the lighted file
$file = implode(PHP_EOL, $file); // convert array to string
file_put_contents($file, $file); // put it back in the file
当你想要添加订阅时,你只需要运行这个
$file_name = 'subscribes.txt';
$delim= ','; // set the delimitor of your cols
$time = time(); // get time to use it in all the script
$file = file_get_contents($file_name); // read file content
$file = explode(PHP_EOL, $file); // transform it in array
$file[] = $cid.$delim.time(); // add to array a new entry
// there you can add multiple entries, let it fit to you :P
$file = implode(PHP_EOL, $file); // convert array to string
file_put_contents($file, $file); // put it back in the file
告诉我,如果它仍然挂起或其他什么,我会尝试寻找其他解决方案:)