首頁 >後端開發 >php教程 >php如何實現定時執行計劃任務?

php如何實現定時執行計劃任務?

黄舟
黄舟原創
2017-11-14 09:46:1724983瀏覽

我們在之前的文章中為大家介紹了php規劃任務的實作原理,相信對此小夥伴們都理解了php規劃任務的原理,那麼我們今天繼續給大家介紹一下php如何實現定時執行計劃任務!

課程推薦:《PHP線上訓練課程

一、windows計劃任務

1、寫一個PHP程序,命名為test.php,內容如下圖


<?   
    $fp = fopen("test.txt", "a+");   
    fwrite($fp, date("Y-m-d H:i:s") . " 成功成功了!\n");   
    fclose($fp);   
?>

程式大膽地寫,什麼include\require儘管用,都沒問題

2、新建Bat文件,命名為test.bat,內容如下所示:


D:\php\php.exe -q D:\website\test.php

3、建立WINDOWS計畫任務:

開始–>控制面板–>任務計畫–>新增任務計畫

瀏覽資料夾選擇上面的bat檔案

設定時間和密碼(登陸WINDOWS的)

已儲存即可了。

4、over! 可以右鍵規劃任務點「執行」試試

二、linux 的腳本實作

##一、在

Crontab中使用PHP執行腳本

就像在Crontab中呼叫普通的shell腳本一樣(具體Crontab用法),使用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

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


*/10 * * * * /usr/bin/wget -q -O temp.txt http:
//www.centos.bz/myscript.php

三、PHP實作定時執行排程任務

使用php讓瀏覽器重新整理需要解決幾個問題

1、PHP腳本執行時間限制,預設的是

30m 解決方案:set_time_limit();或修改PHP.ini 設定max_execution_time時間(不建議)

2、如果客戶端瀏覽器關閉,程式可能就被迫終止,解決方法:

ignore_user_abort即使關閉頁面仍然正常執行

3、如果程式一直執行很有可能會消耗大量的資源,解決辦法使用

sleep使用程式休眠一會,然後在執行PHP定時執行的程式碼


<?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();//实例化   
     $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);//程序执行时间

測試的時候發現這個效率並不是很高

總結:

本文透過windows排程任務、Linux的腳本實現,以及php執行定時排程任務的實例,讓小夥伴麼更為直接的了解php定時執行排程任務,希望對你有幫助!


相關推薦:

php實作計畫任務的原理分析

#php定時規劃任務與持續進程(fsockopen)實例

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

以上是php如何實現定時執行計劃任務?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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