每次我們訪問PHP腳本的時候淑倾,都是當所有的PHP腳本執(zhí)行完成后河狐,我們才得到返回結果当犯。如果我們需要一個腳本持續(xù)的運行垢村,那么我們就要通過php長連接的方式,來達到運行目的嚎卫。
一般php環(huán)境為apache+php+linux嘉栓,但是由于apache對php連接都有時間限制,一般超過這個連接時間apache服務器會自動斷掉連接拓诸。
方法一
這種情況下比較簡單方便的方式就是在php頁面中設置set_time_limit(0)(當然也可以在php.ini配置文件中設置侵佃,但是這樣對整個環(huán)境產生影響,畢竟我們并不想對所有連接都可以長時間連接奠支,影響服務性能)
每個PHP腳本都限制了執(zhí)行時間馋辈,所以我們需要通過 set_time_limit 來設置一個腳本的執(zhí)行時間為無限長,然后使用 flush() 和 ob_flush() 來清除服務器緩沖區(qū)倍谜,隨時輸出腳本的返回值迈螟。
如下例子:
view plain
header("Content-Type: text/plain");
set_time_limit(0);
while( true )
{
// 持續(xù)執(zhí)行的腳本
flush();
ob_flush();
sleep(5);
}
?>
? 當我們執(zhí)行后,每隔5秒鐘枢劝,我們會執(zhí)行一次井联,通過這一方法,我們可以完成很多功能您旁,例如后臺監(jiān)控程序烙常,定時執(zhí)行功能,日志分析鹤盒,數據整理等耗時的操作蚕脏。
下面再看一個簡單例子,官方文檔中例子
view plain
view plain
header('Content-type: text/plain');
echo date("H:m:s"), "/n";
set_time_limit(30);
for ($i = 0; $i < 1000; $i++)
{
echo date("H:m:s"),"/n";
for ($r = 0; $r < 100000; $r++){
$X.= ?tan(M_LNPI+log(ceil( ?date("s")*M_PI*M_LNPI+100)));
}
ob_flush();
flush();
}
echo "work! $x";
?> ?