PHP中長連接的實現


最近遇到PHP程序在執行大量數據的時候提示超時,於是用到了set_time_limit()函數來設置PHP頁面的最大運行時間。
設置允許腳本運行的秒數。如果這是默認的,該腳本返回一個致命的錯誤。默認限制為30秒,或者也可以在在php.ini定義max_execution_time來設置PHP頁面的最大執行時間。
在調用時,set_time_limit()函數從零重新啟動超時計數器。換句話說,如果超時默認的30秒,25秒到腳本的執行參數或者set_time_limit,如設置超時時間為(20),該腳本將運行45秒時才會超時。
set_time_limit(900)這個函數指定了當前所在php腳本的最大執行時間,雖然設定值是900秒,實際上最大執行時間=php.ini里的max_execution_time數值 - 當前腳本已經執行時間 + 設定值。
假如php.ini里的max_execution_time=30,當前腳本已經執行10秒,則:
最大執行時間=30-10+900=920秒。
經過如此修改后,PHP腳本成功更新200000條記錄。


每次我們訪問PHP腳本的時候,都是當所有的PHP腳本執行完成后,我們才得到返回結果。如果我們需要一個腳本持續的運行,那么我們就要通過php長連接的方式,來達到運行目的。

每個PHP腳本都限制了執行時間,所以我們需要通過 set_time_limit 來設置一個腳本的執行時間為無限長;然后使用 flush() 和 ob_flush() 來清除服務器緩沖區,隨時輸出腳本的返回值。


<?php
header("Content-Type: text/plain");
set_time_limit(0);

$infoString = "Hello World" . "\n";
while( isset($infoString) )
{
echo $infoString;
flush();
ob_flush();
sleep(5);
}
?>

當我們執行后,每隔5秒鍾,我們會得到一行 Hello World ,如果不按停止按鈕,瀏覽器會不停的一行一行繼續加載。

通過這一方法,我們可以完成很多功能,例如機器人爬蟲、即時留言板等程序。

版權聲明:本文為博主原創文章,未經博主允許不得轉載。


免責聲明!

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



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