http://tw.php.net/manual/en/function.ignore-user-abort.php
說明:
預設情況,PHP尚未執行完畢,而使用者關閉網頁了,PHP就停止了。
當設定 ignore_user_abort(true) 時,就算使用者關閉瀏覽器網頁,PHP仍可繼續跑完未執行的部份。
未設定 ignore_user_abort(true) 時:
set_time_limit(8); //最大執行時間 8 秒 $fp = fopen('test.txt', 'w'); while(1) { echo date('Y-md-d H:i:s') . str_pad(' ',4096) . "<" . "br" . ">"; #echo chr(0); #echo "\n"; $connStat = connection_status(); fwrite($fp, date('Y-md-d H:i:s') . " connection_status = $connStat \n"); ob_flush(); flush(); sleep(1); } fclose($fp);執行結果如下圖,當PHP知道使用者關閉網頁或停止網頁時,程式也停止了。
(下圖是在網頁執行約2秒時,關掉網頁,並在8秒後,PHP超過最大執行時間停止後的情況)
設定 ignore_user_abort(true) 時:
ignore_user_abort(true); //最大執行時間 8 秒 set_time_limit(8); $fp = fopen('test.txt', 'w'); while(1) { echo date('Y-md-d H:i:s') . str_pad(' ',4096) . "<" . "br" . ">"; #echo chr(0); #echo "\n"; $connStat = connection_status(); fwrite($fp, date('Y-md-d H:i:s') . " connection_status = $connStat \n"); ob_flush(); flush(); sleep(1); } fclose($fp);執行結果如下圖,當PHP知道使用者關閉網頁或停止網頁時,程式仍繼續執行(下圖5~9行)。
(下圖是在網頁執行約2秒時,關掉網頁,並在8秒後,PHP超過最大執行時間停止後的情況)
其他:
- PHP 要送資料到使用者端時,才能知道使用者端網頁是否關閉或停止了。
所以echo一些東西,再用 ob_flush(); flush(); 輸出。 - str_pad(' ',4096) 可有可不有,瀏覽器要接收到一定量的資料才會顯示出來。 在此例子則不影響。
- connection_status() 回傳值說明:
http://php.net/manual/en/function.connection-status.php
http://php.net/manual/en/features.connection-handling.php
0 - NORMAL
1 - ABORTED
2 - TIMEOUT
3 - ABORTED and TIMEOUT
沒有留言:
張貼留言