最近由于項目需要定時對遠程數據庫上做一些處理,這里就需要做一個計劃任務樣子的東西了,經過努力,終于使用php實現了這個計劃任務,下面分享一下此次的實現過程.
本次使用php實現計劃任務主要使用了 ignore_user_abort() set_time_limit(0) sleep() 這三個函數.
PHP實例代碼如下:
- <?php
- ignore_user_abort(); //即使Client斷開(如關掉瀏覽器),PHP腳本也可以繼續執行.
- set_time_limit(0); // 執行時間為無限制,php默認的執行時間是30秒,通過set_time_limit(0)可以讓程序無限制的執行下去
- $interval=60*5; // 每隔5分鐘運行
- do{
- $fp = fopen('test.txt','a');
- fwrite($fp,'test');
- fclose($fp);
- sleep($interval); // 等待5分鐘
- }while(true);
- ?>
- //具體的代碼如下:
- <?php
- ignore_user_abort();//該函數的作用是當用戶關掉瀏覽器后,PHP腳本也可以繼續執行.
- set_time_limit(3000);// 通過set_time_limit(0)可以讓程序無限制的執行下去
- $interval=5;// 每隔5s運行
- //方法1--死循環
- do{
- echo '測試'.time().'<br/>';
- sleep($interval);// 等待5s
- }while(true);
- //方法2---sleep 定時執行
- require_once './curlClass.php';//引入文件
- $curl=new httpCurl('www.phpernote.com');//實例化
- $stime=$curl->getmicrotime();
- for($i=0;$i<=10;$i++){
- echo '測試'.time().'<br/>';
- sleep($interval);// 等待5s
- }
- ob_flush();
- flush();
- $etime=$curl->getmicrotime();
- echo '<hr>';
- echo round(($etime-stime),4);//程序執行時間Vevb.com
函數int ignore_user_abort:
從函數名本身,可以解釋為,"忽略用戶的影響" ,因為所謂的用戶是指客戶端,即瀏覽器,所以進一步解釋為,"忽略瀏覽器的影響",那么影響指的是什么,影響指的是瀏覽器的關閉和異常.
也就是說有這個函數在的php程序,即使在瀏覽器關掉的時候,程序沒有執行完它還會繼續執行,直到執行完,比如說,你有一段代碼需要執行100秒,可是這個時間太長了,一般用戶等不及,在等了60秒的時候受不了就關了.
如果這個時候程序也隨之終止,很可能造成數據異常,不一致或是錯誤,你需要程序繼續運行,就可以用它了,它的參數就是真和假,真就是忽略,假就是不忽略.
在具體的實現過程中個人感覺PHP定時執行任務的效率并不高,建議關于定時執行任務的工作還是交給shell來做吧,相對來說,這個方法實現的太過勉強,而shell是專業級別的了。
linux的腳本程序
這里主要使用到crontab這個命令,使用方式:
crontab filecrontab [ -u user ] [ -u user ] { -l | -r | -e }
說明:crontab 是用來讓使用者在固定時間或固定間隔執行程式之用,使用crontab寫shell腳本,然后讓PHP調用shell,這個是利用linux的特性,應該還不算PHP自身語言的特性.
在Crontab中使用URL執行腳本
如果你的PHP腳本可以通過URL觸發,你可以使用lynx或curl或wget來配置你的Crontab.
下面的例子是使用Lynx文本瀏覽器訪問URL來每小時執行PHP腳本,Lynx文本瀏覽器默認使用對話方式打開URL,但是,像下面的,我們在lynx命令行中使用-dump選項來把URL的輸出轉換來標準輸出,代碼如下:
00 * * * * lynx -dump http://www.49028c.com /script.php
下面的例子是使用CURL訪問URL來每5分執行PHP腳本,Curl默認在標準輸出顯示輸出,使用”curl -o”選項,你也可以把腳本的輸出轉儲到臨時文件,代碼如下:
*/5 * * * * /usr/bin/curl -o temp.txt http://www.49028c.com /script.php
下面的例子是使用WGET訪問URL來每10分執行PHP腳本,-q選項表示安靜模式,”-O temp.txt”表示輸出會發送到臨時文件,代碼如下:
*/10 * * * * /usr/bin/wget -q -O temp.txt http://www.49028c.com /script.php
新聞熱點
疑難解答