2011年1月25日 星期二

使用者關掉網頁,PHP 仍可繼續執行

ignore_user_abort()
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超過最大執行時間停止後的情況)



其他:

沒有留言:

張貼留言