google百度了下,PHP任務大體上可以分為三類
1、伺服器計劃任務
WIN伺服器可以直接使用定時任務執行相關的應用程式,LINUX伺服器則可以通過在/etc/crontab裡添加定時任務來實作。
2、通過死循環實作任務自動執行
建立一個程式檔案頁面,通過ignore_user_abort來設定關閉浏覽器頁面後仍可執行,那麼,在運作該程式頁面後,您所需要的任務計劃便會一直自動執行。對于一般的PHP程式員來說,如果沒有足夠的把握,這種操作是不被允許的,因為死循環極容易使用伺服器當機。
3、觸發式定時任務
在我所了解的幾套程式中,像Discuz、帝國CMS等等,均使用這種方式來完成系統的定時任務,相對前面的兩種方法,這是最為安全和簡單的。
Discuz:
在您設定的計劃任務執行時刻,如果有人通路您的站點,計劃任務才會執行;如果那個時刻沒有人通路您的站點,一直到有人通路時才執行計劃任務。
定時任務對于php來說一直都是很多朋友的一個難題,但卻很多地方都遇到了。
比如說:
遊戲開發程式中,每隔10分鐘給玩家發兵一次
sns社群中每隔20秒檢測一下是否有人給我發消息
自動采集程式,每隔5分鐘采集一次最新内容
微網誌資料同步,每隔10個小時通過微網誌api接口同步一次使用者資料
……
大概有那麼幾種方法:
1.Linux系統
定時直接可以用cron來執行一個php腳本 或者其他語言的腳本[你要有足夠的系統權限]
執行編輯cron指令
<code>crontab</code><code>-e</code>
比如每隔5分鐘執行下 /root/bin目錄下的test.php腳本
*/5 * * * * php /root/bin/test.php
2.windows系統
可用計劃任務執行腳本,不舉例
PHP的實作決定了它沒有Java和.Net這種AppServer的概念, 而http協定是一個無狀态的協定, php隻能被使用者觸發, 被調用, 調用後會自動退出記憶體, 沒有常駐記憶體, 就沒有辦法準确的定時處理
那麼, 如果需要用PHP定時執行某些任務的話, 可以有以下幾個方法:
1、Linux下crontab, windows下計劃任務
2、找個被頻繁調用的網頁, 裡面加上一個檢測代碼
3、set_time_limit(0);
ignore_user_abort(true);
死循環
第一種:方法是最常見的, 但也是最靠譜的,如果php伺服器上沒有權限去crontab, 也可以找一個自己的機器定期crontab去請求伺服器
第二種:方法, 論壇上定時清理新帖基本上就是這麼實作的, 如果人氣不旺的話, 可以考慮去别的火爆點的論壇裡面發個圖檔, 調用自己的php來實作一個trigger就好了。 Discuz!是判斷在00:00之後,第一個執行者去執行的。
第三種:最不靠譜, Apache重新開機了就得重新通路, fastcgi倒是會好一點。
網上參考:
<a href="http://blog.163.com/zbstrive_work@126/blog/static/165378687201141143512114/" target="_blank">http://blog.163.com/zbstrive_work@126/blog/static/165378687201141143512114/</a>
本文轉自許琴 51CTO部落格,原文連結:http://blog.51cto.com/xuqin/1369169,如需轉載請自行聯系原作者