我們之前為大家介紹了php計劃任務的原理,以及實現定時執行計劃任務,有時我們在專案中需要對遠端資料庫上做處理,這時我們就要使用到php計劃任務,今天就給大家介紹下php計畫任務的處理實例!
這次使用php實作計畫任務主要使用了 ignore_user_abort() set_time_limit(0) sleep() 這三個函數。
範例
<table width="620" align="center" border="0" cellpadding="1" cellspacing="1" style="background:#FB7"> <tr> <td width="464" height="27" bgcolor="#FFE7CE"> 代码如下</td> <td width="109" align="center" bgcolor="#FFE7CE" style="cursor:pointer;" onclick="doCopy('copy1032')">复制代码</td> </tr> <tr> <td height="auto" colspan="2" valign="top" bgcolor="#FFFFFF" style="padding:10px;" class="copyclass" id=copy1032> <?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); ?> </td> </tr> </table>
具體的程式碼如下:
<table width="620" align="center" border="0" cellpadding="1" cellspacing="1" style="background:#FB7"> <tr> <td width="464" height="27" bgcolor="#FFE7CE"> 代码如下</td> <td width="109" align="center" bgcolor="#FFE7CE" style="cursor:pointer;" onclick="doCopy('copy7070')">复制代码</td> </tr> <tr> <td height="auto" colspan="2" valign="top" bgcolor="#FFFFFF" style="padding:10px;" class="copyclass" id=copy7070> <?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);//程序执行时间 </td> </tr> </table>
函數int ignore_user_abort :
從函數名稱本身,可以解釋為,"忽略使用者的影響"
因為所謂的使用者是指客戶端,即瀏覽器
所以進一步解釋為,"忽略瀏覽器的影響"
那麼影響指的是什麼,影響指的是瀏覽器的關閉和異常
也就是說有這個函數在的php程式,即使在瀏覽器關掉的時候,程式沒有執行完它還會繼續執行,直到執行完
#例如說,你有一段程式碼需要執行100秒,可是這個時間太長了,一般用戶等不及,在等了60秒的時候受不了就關了
如果這個時候程式也隨之終止,很可能造成資料異常,不一致或錯誤,你需要程式繼續運行,就可以用它了
它的參數就是真和假,真就是忽略,假就是不忽略
在具體的實作過程中個人感覺PHP定時執行任務的效率並不高,建議關於定時執行任務的工作還是交給shell來做吧,相對來說,這個方法實現的太過勉強,而shell是專業級別的了。
2、linux的腳本程式
這裡主要使用到crontab這個指令,
使用方式:
crontab filecrontab [ -u user ] [ -u user ] { -l | -r | -e }
說明:
## crontab 是用來讓使用者在固定時間或固定間隔執行程序之用使用crontab寫shell腳本,然後讓PHP呼叫shell,這個是利用linux的特性,應該還不包括PHP自身語言的特性在Crontab中使用URL執行腳本
<table width="620" align="center" border="0" cellpadding="1" cellspacing="1" style="background:#FB7"> <tr> <td width="464" height="27" bgcolor="#FFE7CE"> 代码如下</td> <td width="109" align="center" bgcolor="#FFE7CE" style="cursor:pointer;" onclick="doCopy('copy7213')">复制代码</td> </tr> <tr> <td height="auto" colspan="2" valign="top" bgcolor="#FFFFFF" style="padding:10px;" class="copyclass" id=copy7213> 00 * * * * lynx -dump http://www.111cn.net /script.php </td> </tr> </table>
URL存取URL來每5分執行PHP腳本。 Curl預設在標準輸出顯示輸出。使用”curl -o”選項,你也可以把腳本的輸出轉儲到臨時檔案。
<table width="620" align="center" border="0" cellpadding="1" cellspacing="1" style="background:#FB7"> <tr> <td width="464" height="27" bgcolor="#FFE7CE"> 代码如下</td> <td width="109" align="center" bgcolor="#FFE7CE" style="cursor:pointer;" onclick="doCopy('copy6465')">复制代码</td> </tr> <tr> <td height="auto" colspan="2" valign="top" bgcolor="#FFFFFF" style="padding:10px;" class="copyclass" id=copy6465> */5 * * * * /usr/bin/curl -o temp.txt http://www.111cn.net /script.php</td> </tr> </table>
<table width="620" align="center" border="0" cellpadding="1" cellspacing="1" style="background:#FB7"> <tr> <td width="464" height="27" bgcolor="#FFE7CE"> 代码如下</td> <td width="109" align="center" bgcolor="#FFE7CE" style="cursor:pointer;" onclick="doCopy('copy1200')">复制代码</td> </tr> <tr> <td height="auto" colspan="2" valign="top" bgcolor="#FFFFFF" style="padding:10px;" class="copyclass" id=copy1200> */10 * * * * /usr/bin/wget -q -O temp.txt http://www.111cn.net /script.php </td> </tr> </table></td> </tr> </table>
總結:
本文是透過實際的專案開發過程實現的php計畫任務的實例,對你們的開發工作有一定的幫助!相關推薦:
以上是php排程任務的範例程式碼分享的詳細內容。更多資訊請關注PHP中文網其他相關文章!