PHP如何實現定時任務,PHP定時任務方法,最佳解決方案,PHP自動任務處理 自動備份


定時任務對於php來說一直都是很多朋友的一個難題,但卻很多地方都遇到了。
比如說:
游戲開發程序中,每隔10分鍾給玩家發兵一次
sns社區中每隔20秒檢測一下是否有人給我發消息
自動采集程序,每隔5分鍾采集一次最新內容
微博數據同步,每隔10個小時通過微博api接口同步一次用戶數據
……

大概有那么幾種方法:
1.Linux系統
定時直接可以用cron來執行一個php腳本 或者其他語言的腳本[你要有足夠的系統權限]
執行編輯cron命令

1
crontab -e

比如每隔5分鍾執行下 /root/bin目錄下的test.php腳本

*/5 * * * * php /root/bin/test.php

2.windows系統
可用計划任務執行腳本,不舉例

3.如果沒有系統權限,那就往下看吧。
由於php屬於解釋型弱語言,所以做定時任務的時候不會像java那樣容易,在java中直接給個進程就可以讓系統執行定時任務,但是在php中沒那么簡單 設置都沒有多線程的概念。

我第一次接觸定時任務的時候是一個做php的朋友問我怎么實現定時發兵,我當時給出的答案是寫一個包含文件,每次都執行的時候都調用這個文件檢查是否有任務,但試想 如果沒人觸發怎么辦,顯然答案並不完美。

后來我又通過其他渠道獲得了解決的最佳辦法,而且我還親自做了測試。
大致理念就是設定關閉瀏覽器程序也會停留在服務器內存中執行,並且相應時間永不過期
看程序:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
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.xxtime.comrn" );
             if (! $flag )
             {
                 echo "寫入文件失敗" ;
                 break ;
             }
         }
     }
     fclose( $fp );
     // 寫文件操作結束
 
     $count ++;
     // 設定定時任務終止條件
     if ( file_exists ( 'lock.txt' ))
     {
         break ;
     }
}

把這個文件命名為 tast.php 放在網站根目錄
如: www.xxtime.com/tast.php
訪問此網頁。此程序會再網站根目錄不斷生成名為test0.txt,test1.txt,test2.txt…的文本文件
訪問后可關閉瀏覽器,不影響程序繼續執行,如想阻止程序,請在網站根目錄下放一個名為lock.txt的文件。
如:www.xxtime.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調用命令備份mysql的文章http://www.iteye.com/problems/90027


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM