轉(zhuǎn)載自:http://www.cnblogs.com/phphuaibei/archive/2011/12/16/2290574.html
摘要:PHP不支持多線程,有時(shí)候處理問(wèn)題不是那么爽,今天談?wù)撘幌翽HP定時(shí)執(zhí)行的方法
PHP定時(shí)執(zhí)行的三種方式實(shí)現(xiàn)
1、windows 的計(jì)劃任務(wù)
2、linux的腳本程序
3、讓web瀏覽器定時(shí)刷新
具體實(shí)現(xiàn)
windows計(jì)劃任務(wù)
PHP很少在win服務(wù)器上跑,具體實(shí)現(xiàn)也不再深究,看網(wǎng)上實(shí)現(xiàn)的原理大概是寫(xiě)bat腳本,然后讓window任務(wù)添加執(zhí)行這個(gè)bat腳本,具體可以參考:http://www.cnblogs.com/whoknows/articles/2228577.html
linux 的腳本實(shí)現(xiàn)
這里主要使用到crontab這個(gè)命令,
使用方式 :
crontab filecrontab [ -u user ] [ -u user ] { -l | -r | -e }
說(shuō)明 :
crontab 是用來(lái)讓使用者在固定時(shí)間或固定間隔執(zhí)行程式之用
使用crontab寫(xiě)shell腳本,然后讓PHP調(diào)用shell,這個(gè)是利用linux的特性,應(yīng)該還不算PHP自身語(yǔ)言的特性
可以參看:http://www.centos.bz/2011/07/php-cron-job-linux-crontab/
PHP實(shí)現(xiàn)定時(shí)執(zhí)行計(jì)劃任務(wù)

使用php讓瀏覽器刷新需要解決幾個(gè)問(wèn)題
- PHP腳本執(zhí)行時(shí)間限制,默認(rèn)的是30m 解決辦法:set_time_limit();或者修改PHP.ini 設(shè)置max_execution_time時(shí)間(不推薦)
- 如果客戶端瀏覽器關(guān)閉,程序可能就被迫終止,解決辦法:ignore_user_abort即使關(guān)閉頁(yè)面依然正常執(zhí)行
- 如果程序一直執(zhí)行很有可能會(huì)消耗大量的資源,解決辦法使用sleep使用程序休眠一會(huì),然后在執(zhí)行
PHP定時(shí)執(zhí)行的代碼:
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
|
<?php
ignore_user_abort();
set_time_limit(3000);
$interval =5;
do {
echo '測(cè)試' .time(). '<br/>' ;
sleep( $interval );
} while (true);
require_once './curlClass.php' ;
$curl = new httpCurl();
$stime = $curl ->getmicrotime();
for ( $i =0; $i <=10; $i ++){
echo '測(cè)試' .time(). '<br/>' ;
sleep( $interval );
}
ob_flush();
flush ();
$etime = $curl ->getmicrotime();
echo '<hr>' ;
echo round (( $etime -stime),4);
|
測(cè)試的時(shí)候發(fā)現(xiàn)這個(gè)效率并不是很高,

總結(jié):
個(gè)人感覺(jué)PHP定時(shí)執(zhí)行任務(wù)的效率不是很高,建議關(guān)于定時(shí)執(zhí)行任務(wù)的工作還是交給shell來(lái)做吧,比較那才是王道。
ps:那個(gè)死循環(huán)的方法好像是惡意攻擊網(wǎng)站經(jīng)常使用的方法