PHP屬於弱型別解釋型語言,它的實現決定了它沒有Java和.Net這種AppServer的概念, 而http協議是一個無狀態的協議, PHP只能被用戶觸發調用, 調用後會自動退出內存, 沒有常駐記憶體, 就沒有辦法準確的定時處理。
如果需要用PHP定時執行某些任務的話, 可以有以下方法:
1、Linux下crontab, windows下計畫任務
死循環
第一種: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(超時)