天天看點

PHP定時執行計劃任務PHP定時執行的三種方式實作具體實作

1、windows 的計劃任務 

2、linux的腳本程式 

3、讓web浏覽器定時重新整理

這裡主要使用到crontab這個指令,

使用方式 :

crontab   filecrontab [ -u user ] [ -u user ] { -l | -r | -e }

說明 :

crontab 是用來讓使用者在固定時間或固定間隔執行程式之用

使用crontab寫shell腳本,然後讓PHP調用shell,這個是利用linux的特性,應該還不算PHP自身語言的特性

<a href="http://images.cnblogs.com/cnblogs_com/phphuaibei/201112/201112161840564770.jpg"></a>

PHP腳本執行時間限制,預設的是30m 解決辦法:set_time_limit();或者修改PHP.ini 設定max_execution_time時間(不推薦)

如果用戶端浏覽器關閉,程式可能就被迫終止,解決辦法:ignore_user_abort即使關閉頁面依然正常執行

如果程式一直執行很有可能會消耗大量的資源,解決辦法使用sleep使用程式休眠一會,然後在執行

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

<code>&lt;?php</code>

<code>ignore_user_abort();</code><code>//關掉浏覽器,PHP腳本也可以繼續執行.</code>

<code>set_time_limit(3000);</code><code>// 通過set_time_limit(0)可以讓程式無限制的執行下去</code>

<code>$interval</code><code>=5;</code><code>// 每隔5s運作</code>

<code>//方法1--死循環</code>

<code>do</code><code>{</code>

<code>    </code><code>echo</code> <code>'測試'</code><code>.time().</code><code>'&lt;br/&gt;'</code><code>;</code>

<code>    </code><code>sleep(</code><code>$interval</code><code>);</code><code>// 等待5s   </code>

<code>}</code><code>while</code><code>(true);</code>

<code>//方法2---sleep 定時執行</code>

<code>    </code><code>require_once</code> <code>'./curlClass.php'</code><code>;</code><code>//引入檔案</code>

<code>    </code> 

<code>    </code><code>$curl</code> <code>=</code><code>new</code> <code>httpCurl();</code><code>//執行個體化</code>

<code>    </code><code>$stime</code> <code>=</code><code>$curl</code><code>-&gt;getmicrotime();</code>

<code>    </code><code>for</code><code>(</code><code>$i</code><code>=0;</code><code>$i</code><code>&lt;=10;</code><code>$i</code><code>++){</code>

<code>        </code> 

<code>        </code><code>echo</code> <code>'測試'</code><code>.time().</code><code>'&lt;br/&gt;'</code><code>;</code>

<code>        </code><code>sleep(</code><code>$interval</code><code>);</code><code>// 等待5s</code>

<code>    </code><code>}</code>

<code>    </code><code>ob_flush();</code>

<code>    </code><code>flush</code><code>();</code>

<code>    </code><code>$etime</code> <code>=</code><code>$curl</code><code>-&gt;getmicrotime();</code>

<code>    </code><code>echo</code> <code>'&lt;hr&gt;'</code><code>;</code>

<code>    </code><code>echo</code> <code>round</code><code>((</code><code>$etime</code><code>-stime),4);</code><code>//程式執行時間</code>

<code> </code> 

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

<a href="http://images.cnblogs.com/cnblogs_com/phphuaibei/201112/201112161840567834.png"></a>

個人感覺PHP定時執行任務的效率不是很高,建議關于定時執行任務的工作還是交給shell來做吧,比較那才是王道。

ps:那個死循環的方法好像是惡意攻擊網站經常使用的方法