這一節主要討論PHP定時執行任務的實現方法。
首先,每個PHP腳本都限制了執行時間,所以我們需要通過 set_time_limit 來設置一個腳本的執行時間為無限長。php默認的執行時間是30秒,通過set_time_limit(0)可以讓程序無限制的執行下去 。
解決了執行時間的問題,但如果客戶端斷開了怎么辦呢?使用函數 ignore_user_abort(),即使Client斷開(如關掉瀏覽器),PHP腳本也可以繼續執行。除非 apache 等服務器重啟,該PHP腳本將一直處于執行的狀態。
語法:
1、int ignore_user_abort ([ string $html' target='_blank'>value ] )函數:
設置客戶端斷開連接時是否中斷腳本的執行。PHP以命令行腳本執行時,當腳本終端結束,腳本不會被立即中止,除非設置 value 為 TRUE,否則腳本輸出任意字符時會被中止。
如果設置了 value 值,函數會把 ignore_user_abort ini的值設置為 value。 如果未設置該值,函數不會改變設置,僅會返回之前的設置。
注意:在PHP嘗試發送信息到客戶端之前,不會檢測到用戶是否已中斷連接。 僅使用 echo 語句不能確保信息已發送。
2、void set_time_limit ( int $seconds )函數:
設置允許腳本運行的時間,單位為秒。如果超過了此設置,腳本返回一個致命的錯誤。默認值為30秒,或者是 php.ini 中max_execution_time被定義的值(如果此值存在)。
當此函數被調用時,set_time_limit()會從零開始重新啟動超時計數器。換句話說,如果超時默認是30秒,在腳本運行了了25秒時調用 set_time_limit(20),那么,腳本在超時之前可運行總時間為45秒。
注意:當php運行于安全模式時,此功能不能生效。除了關閉安全模式或改變php.ini中的時間限制,沒有別的辦法。
接下來,我們來看一個例子:
--------------------------------------------------------------------
<?php
ignore_user_abort(); //關掉瀏覽器,PHP腳本也可以繼續執行.
set_time_limit(0); // 通過set_time_limit(0)可以讓程序無限制的執行下去
function write_txt()
{
if(!file_exists("test.txt"))
{
$fp = fopen("test.txt","wb");
fclose($fp);
}
$str = file_get_contents('test.txt');
$str .= "/r/n".date("H:i:s");
echo $str;
$fp = fopen("test.txt","wb");
fwrite($fp,$str);fclose($fp);
}
function do_cron()
{
$interval=60*1; // 每隔1分鐘運行
sleep($interval);
write_txt();
}
do{
do_cron();
}while(true);
?>
--------------------------------------------------------------------
代碼執行結果:

PHP編程 鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。