PHP程式有時候需要定時執行,使用Linux的Crontab執行PHP指令碼,完成PHP計劃任務。譬如,微博上用得很多的一款APP應用——皮皮時光機,就是實現定時發送內容的功能。當然PHP中也有ignore_user_abort函數。
但這兩種方法都不太可靠,不穩定。我們可以藉助Linux的Crontab工具來穩定可靠地觸發PHP執行任務。
下面介紹Crontab的兩種方法。
一、在Crontab中使用PHP執行指令碼
就像在Crontab中調用普通的shell指令碼一樣,使用PHP程式來調用PHP指令碼。
每一小時執行myscript.php如下:
# crontab -e
00 * * * * /usr/local/bin/php /home/john/myscript.php/usr/local/bin/php為PHP程式的路徑。
二、在Crontab中使用URL執行指令碼
如果你的PHP指令碼可以通過URL觸發,你可以使用lynx或curl或wget來配置你的Crontab。
下面的例子是使用Lynx文本瀏覽器訪問URL來每小時執行PHP指令碼。Lynx文本瀏覽器預設使用對話方式開啟URL。但是,像下面的,我們在lynx命令列中使用-dump選項來把URL的輸出轉換來標準輸出。
00 * * * * lynx -dump http://www.centos.bz/myscript.php下面的例子是使用CURL訪問URL來每5分執行PHP指令碼。Curl預設在標準輸出顯示輸出。使用”curl -o”選項,你也可以把指令碼的輸出轉儲到臨時檔案。
*/5 * * * * /usr/bin/curl -o temp.txt http://www.centos.bz/myscript.php當然,完成PHP計劃任務的方法比較多Win下面也有計劃任務,方法有很多的,但是比較穩定,也比較不錯的方法基本是都是使用Linux下的這種Crontab。
直接在php中做
如果由頁面執行,設定
<?php
ignore_user_abort(true);
set_time_limit(0);
?>
運用sleep(300)+死迴圈,
這樣就可以實現計劃任務了,這個程式裡不要有輸出,有輸出容易中斷
代碼如下 |
複製代碼 |
<?php ignore_user_abort(true); set_time_limit(0); while(1){ $fp = fopen('time_task.txt',"a+"); $str = date("Y-m-d h:i:s")."n"; fwrite($fp,$str);//記錄到time_task.txt文本 fclose($fp); sleep(1800); //半小時執行一次 } ?> |
函數int ignore_user_abort :
從函數名本身,可以解釋為,"忽略使用者的影響"
因為所謂的使用者是指用戶端,即瀏覽器
所以進一步解釋為,"忽略瀏覽器的影響"
那麼影響指的是什麼,影響指的是瀏覽器的關閉和異常
也就是說有這個函數在的php程式,即使在瀏覽器關掉的時候,程式沒有執行完它還會繼續執行,直到執行完
比如說,你有一段代碼需要執行100秒,可是這個時間太長了,一般使用者等不及,在等了60秒的時候受不了就關了
如果這個時候程式也隨之終止,很可能造成資料異常,不一致或是錯誤,你需要程式繼續運行