2011-04-28 39 views
0

我做了這個檢查我的課程安排,以提醒我什麼時候沒有課程。我把它設置在一個cron作業上來檢查每一個小時,但是我的問題是,當沒有課時,我整天都在收到警報,並且無法停止它,除非我禁用cron作業。 我想知道的是,我怎麼能限制這一天只有5個警報?if if with limit php

$source = file_get_contents($website); 
preg_match('#<classtime>(.*?)</classtime>#', $source, $match); 

    if (strlen($match[1])<32) { 
     mail('[email protected]', 'REMINDER!', 'No Class'); 
    } 
    else 

    if (strlen($match[1])>32) { 
     mail('[email protected]', 'REMINDER!', 'No Class'); 
    } 

    else { 
     echo "Check Class Schedule"; 
    } 
+0

*(旁註)*考慮使用SimpleXml解析XML使用正則表達式。考慮檢查'if === 32然後回覆其他郵件'去除重複。另外,用有意義的東西替換幻數32。 – Gordon 2011-04-28 17:36:08

+0

爲了讓事情變得有趣,你的意思是在24小時內5或在午夜和午夜5之間?我認爲你的意思是後者,但前者會更有趣。 – 2011-04-28 17:39:20

+0

@Blowski是24小時期間會很好。 – jack 2011-04-28 17:44:59

回答

0

保存的文本文件(或使用一個數據庫)來更新多少次的那一天已經觸發了警報, 比5不如果是更大的發送警報

0

商店的數在某個文件中發送警報,每次檢查時增加警報,如果警報計數大於5,則不發送警報。午夜過後,將計數重置爲0.

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); 

如果使用每次遇到「無級」塞納里奧,一旦達到5,如果讀說5,這個時間不發送任何消息。然後爲了簡單起見,在午夜有一個cron作業來將「0」回顯到文件中。

+0

謝謝!我只是想知道,如果我只是把它放到我的代碼中,或者我必須將我的代碼添加到這個 – jack 2011-04-28 18:02:29

+0

要麼說實話。讀取和增加計數器,您可以將代碼添加到它,或它添加到您的代碼。 – BugFinder 2011-04-28 20:36:16

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('[email protected]', 'REMINDER!', 'No Class'); 
     } 
    }