1. 程式人生 > >php後臺運行以及定時任務的4種實現原理以及代碼

php後臺運行以及定時任務的4種實現原理以及代碼

html 除了 tar 時間比較 文章 limit 代碼 最好 程序員

後臺任務在我們php編程中雖然用的不是很多甚至很多php程序員都沒聽過甚至覺得後臺運行是不可能實現的,本人因為項目需求多次演變在這裏分享給大家,本人第一次想實現後臺運行是利用 方法二 在其執行完成後輸出一段Js代碼讓頁面再次執行,然後在服務器中打開該頁面!以下實現方式除了方法一我不推薦使用外其他我在項目中都使用過!

方法一、php自帶函數實現後臺運行(不推薦使用,不太穩定而且弊端很多)
set_time_limit 允許運行的最長時間,0表示不限制
sleep 運行後延時多久在運行後面的代碼

當我什麽使用set_time_limit函數後將代碼寫在一個無限循環裏面即可!

set_time_limit
(0); while (true) { //php代碼 sleep(10); //運行一次延時10秒後在執行下一次 }

方法二、寫成網頁瀏覽的形式打開即執行然後用http監控
HTTP監控本來是用來監控網站狀態的,一次項目的時候無意將其做為了後臺運行的方法;
HTTP監控會定期通過http協議(Get/Post)訪問你要監控的頁面,而每一次訪問都會運行我們要執行的代碼,如果運行時間比較長可以加入方法一的set_time_limit;

推薦2個Http監控網站:
1-阿裏雲監控(免費監控11個網站,多了收費,免費帶短信提醒,個人推薦)
2-360雲監控(http://jk.cloud.360.cn/Index/products) 不是很喜歡用360的產品



方法三、惰性運行
惰性也就是說每次網站運行都會運行那些被定義為後臺任務的代碼,Discuz開源系統就是用的這種方法,流量越大越任務越精準,我個人用此方法實現一般都是開發成一個全局插件來運行php任務腳本文件!

方法四、php Cli模式(推薦)
php Cli模式運行穩定超過70%的php程序員不知道此方法.本人一套php采集系統利於cli模式穩定運行半年,采集文章300+萬;
當我們運行利於cli模式運行一個php文件之後會自動執行裏面的代碼,我們只需要將代碼寫成一個無限循環即可,不過最好在執行一次循環後加入sleep延時!

註意事項:
1、在無限循環中如果要載入文件必須用require_once或者include_once否則會出現重復函數或者類已經存在之類的錯誤!

2、如果在無限循環中想要後臺操作退出循環可以創建一個文件,每次循環都先判斷該文件是否存在,存在則運行代碼,不存在則跳過代碼,這樣我們可以後臺控制後臺運行的啟動與關閉!


原文地址:http://www.dmzshequ.com/thread-7434-1-1.html

php後臺運行以及定時任務的4種實現原理以及代碼