首頁  >  文章  >  後端開發  >  php排程任務的範例程式碼分享

php排程任務的範例程式碼分享

黄舟
黄舟原創
2018-05-15 14:23:132394瀏覽

我們之前為大家介紹了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(&#39;copy1032&#39;)">复制代码</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(&#39;test.txt&#39;,&#39;a&#39;); 
fwrite($fp,&#39;test&#39;); 
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(&#39;copy7070&#39;)">复制代码</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 &#39;测试&#39;.time().&#39;<br/>&#39;; 
 sleep($interval);// 等待5s    
}while(true);
//方法2---sleep 定时执行
require_once &#39;./curlClass.php&#39;;//引入文件
$curl=new httpCurl(&#39;www.phpernote.com&#39;);//实例化
$stime=$curl->getmicrotime();
for($i=0;$i<=10;$i ){
 echo &#39;测试&#39;.time().&#39;<br/>&#39;; 
 sleep($interval);// 等待5s
}
ob_flush();
flush();
$etime=$curl->getmicrotime();
echo &#39;<hr>&#39;;
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執行腳本

如果你的PHP腳本可以透過URL觸發,你可以使用lynx或curl或wget來設定你的Crontab。

下面的例子是使用Lynx文字瀏覽器存取URL來每小時執行PHP腳本。 Lynx文字瀏覽器預設使用對話方式開啟URL。但是,像是下面的,我們在lynx命令列中使用-dump選項來把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(&#39;copy7213&#39;)">复制代码</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>

下面的範例是使用C

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(&#39;copy6465&#39;)">复制代码</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>

下面的例子是使用WGET存取URL來每10分執行PHP腳本。 -q選項表示安靜模式。 ”-O temp.txt」表示輸出會傳送到暫存檔案。

<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(&#39;copy1200&#39;)">复制代码</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實作計畫任務的原則分析


#

php實作計畫任務與持續進程實例fsockopen


#php 計畫任務 偵測使用者連線狀態

以上是php排程任務的範例程式碼分享的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn