PHP屬于弱類型解釋型語言,它的實作決定了它沒有Java和.Net這種AppServer的概念, 而http協定是一個無狀态的協定, PHP隻能被使用者觸發調用, 調用後會自動退出記憶體, 沒有常駐記憶體, 就沒有辦法準确的定時處理。
如果需要用PHP定時執行某些任務的話, 可以有如下方法:
1、Linux下crontab, windows下計劃任務
2、set_time_limit(0);
ignore_user_abort(true);
死循環
第一種:crontab定期執行的php檔案,一般需要有個表來記錄每個任務的名稱、目前程序ID、更新時間及程序開始ID 等資訊。批處理過程包括:執行前準備、執行、執行後處理,整個處理過程可以利用OO思想來封裝個批處理基類,每個批處理任務可以繼承這個基類來實作資料的處理。
第二種:通過通路此檔案觸發執行,存在Apache伺服器重新開機後或機器重新開機(windows環境)後終止的問題。示例如下:ignore_user_abort(true); // 設定關閉浏覽器後也可執行
set_time_limit(0); // 設定相應時間無限制,原預設30s
function write_txt()
{
$filename = 'test.txt';
if (!file_exists($filename))
{
$fp = fopen($filename, 'w');
fclose($fp);
}
$fp = fopen($filename, 'r+');
$str = file_get_contents($filename);
$str .= date('Y-m-d H:i:s')."\r\n";
fwrite($fp, $str);
fclose($fp);
}
function do_cron()
{
write_txt();
sleep(30);
}
while (1)
{
do_cron();
}
connection_aborted() — 檢查用戶端是否已經斷開 斷開則傳回1,否則傳回0
connection_status — 傳回連接配接的狀态位 0 - NORMAL(正常); 1 - ABORTED(異常退出); 2 - TIMEOUT(逾時)
本條技術文章來源于網際網路,如果無意侵犯您的權益請點選此處回報版權投訴
本文系統來源:php中文網