我这是为了检查我的课程安排,以便在没有课时提醒我。我把它设置在一个cron作业上来检查每一个小时,但我的问题是,当没有课程时,我会一整天都收到警报,除非我禁用cron作业,否则无法阻止它。 我想知道的是我如何将这一天限制为仅限5个警报?
$source = file_get_contents($website);
preg_match('#<classtime>(.*?)</classtime>#', $source, $match);
if (strlen($match[1])<32) {
mail('XXXXXXXXXX@txt.att.net', 'REMINDER!', 'No Class');
}
else
if (strlen($match[1])>32) {
mail('XXXXXXXXXX@txt.att.net', 'REMINDER!', 'No Class');
}
else {
echo "Check Class Schedule";
}
答案 0 :(得分:0)
保存文本文件(或使用数据库)以更新当天发送警报的次数, 如果大于5,则不发送警报
答案 1 :(得分:0)
将发送的警报计数存储在某个文件中,每次检查时都会增加,并且如果计数>&gt;则不发送警报。 5.午夜过后,将计数重置为0.
答案 2 :(得分:0)
快速简单的答案是创建一个文件,您可以读写。例如
while (( $fp = fopen ($counterfile,"r+")) == false)
{ usleep(5);}
while (!flock($fp,2))
{ usleep(5); }
$data = fread($fp,filesize($counterfile));
if (rewind($fp)!=0)
{
$data++;
fwrite($fp,$data,strlen($data));
}
flock($fp,3);
fclose($fp);
如果每次遇到“No class”senario时都使用它,一旦达到5,如果读取为5,则不再发送任何消息。然后为了保持简单,在午夜有一个cron作业将“0”回显到文件中。
答案 3 :(得分:0)
在过去24小时内检查不超过5封电子邮件。可以大规模改进,它需要错误处理,但它应该工作:
$log_file = 'log.txt';
$log = file_get_contents( $log_file );
$timestamps = array_splice( explode( PHP_EOL, $log ), -5, 1 );
if ( count( $timestamps > 5 ) )
{
if ( end( $timestamps ) == '' )
{
array_pop( $timestamps );
}
$fifth_from_last_email = ($timestamps[0]);
$time_24_hours_ago = time() - 3600 * 24;
if ( $fifth_from_last_email < $time_24_hours_ago )
{
$fp = fopen( $log_file, 'a+' );
fwrite( $fp, time() . PHP_EOL );
fclose( $fp );
mail( 'XXXXXXXXXX@txt.att.net', 'REMINDER!', 'No Class' );
}
}