標籤:blog http io ar os sp java for strong
php如何?定時任務,php定時任務方法,最佳解決方案,php自動任務處理Joe PHP 2012-01-18
定時任務對於php來說一直都是很多朋友的一個難題,但卻很多地方都遇到了。
比如說:
遊戲開發程式中,每隔10分鐘給玩家發兵一次
sns社區中每隔20秒檢測一下是否有人給我發訊息
自動採集程式,每隔5分鐘採集一次最新內容
微博資料同步,每隔10個小時通過微博api介面同步一次使用者資料
……
大概有那麼幾種方法:
1.Linux系統
定時直接可以用cron來執行一個php指令碼 或者其他語言的指令碼[你要有足夠的系統許可權]
執行編輯cron命令
比如每隔5分鐘執行下 /root/bin目錄下的test.php指令碼
*/5 * * * * php /root/bin/test.php
2.windows系統
可用計劃任務執行指令碼,不舉例
3.如果沒有系統許可權,那就往下看吧。
由於php屬於解釋型弱語言,所以做定時任務的時候不會像java那樣容易,在java中直接給個進程就可以讓系統執行定時任務,但是在php中沒那麼簡單 設定都沒有多線程的概念。
我第一次接觸定時任務的時候是一個做php的朋友問我怎麼實現定時發兵,我當時給出的答案是寫一個包含檔案,每次都執行的時候都調用這個檔案檢查是否有任務,但試想 如果沒人觸發怎麼辦,顯然答案並不完美。
後來我又通過其他渠道獲得瞭解決的最佳辦法,而且我還親自做了測試。
大致理念就是設定關閉瀏覽器程式也會停留在伺服器記憶體中執行,並且相應時間永不到期
看程式:
| 1234567891011121314151617181920212223242526272829303132 |
ignore_user_abort(TRUE);// 設定關閉瀏覽器也執行程式set_time_limit(0); // 設定回應時間不限制,預設為30秒 $count = 0;while (TRUE){ sleep(5); // 每5秒鐘執行一次 // 寫檔案操作開始 $fp = fopen("test".$count.".txt", "w"); if($fp) { for($i=0; $i<5; $i++) { $flag=fwrite($fp,$i."這裡是檔案內容www.uacool.com\r\n"); if(!$flag) { echo "寫入檔案失敗"; break; } } } fclose($fp); // 寫檔案操作結束 $count++; // 設定定時任務終止條件 if (file_exists(‘lock.txt‘)) { break; }} |
把這個檔案命名為 tast.php 放在網站根目錄
如: www.uacool.com/tast.php
訪問此網頁。此程式會再網站根目錄不斷產生名為test0.txt,test1.txt,test2.txt…的文字檔
訪問後可關閉瀏覽器,不影響程式繼續執行,如想阻止程式,請在網站根目錄下放一個名為lock.txt的檔案。
如:www.uacool.com/lock.txt
當然重新啟動伺服器或者重啟電腦也可以阻止程式繼續運行
相關內容:
windows的schtasks定時任務:http://www.cnblogs.com/lostyue/archive/2011/10/24/2223166.html
Cron服務是SAE為開發人員提供的分布式定時服務:http://sae.sina.com.cn/?m=devcenter&catId=195
php如何?定時任務,php定時任務方法,最佳解決方案,php自動任務處理