php鏈接狀態測試(運行中 關閉瀏覽器)

今天遇到個問題,php怎樣去檢測客戶端是否已經斷開鏈接呢? php

開始的時候覺得就用函數connection_aborted()或者connection_status()函數就能夠知道了, 瀏覽器

誰知道坑爹的沒反應. 服務器

後來經過測試和google找到了方法 函數

其實關鍵其實就在flush函數,由於php沒有經過刷新緩衝區和使用flush()的時候是整個文件輸出到客戶端內容的. 測試

當輸出到客戶端的時候實際上php已經運行完了. google

因此當使用flush()函數時候,php會立刻將輸出的內容發送到客戶端,但假如客戶端已經中斷鏈接的話,服務器就會知道客戶端已經停止鏈接了. spa

表達能力不是很好,有些錯或者看不懂的能夠告訴我,謝謝 code

下面是測試代碼: it


ob_start();
ignore_user_abort(TRUE);//容許php忽略用客戶端中斷
$fp = fopen('connection_test.txt','w+');
fwrite($fp, "start run\r\n");
for($i=0, $counter=10;$i<$counter;$i++){
    if(connection_aborted()){
        //提示若是客戶端斷開鏈接則在文件裏輸入提示並中止腳本
        fwrite($fp, "user aborted the connection, connection_status return ".connection_status()."\r\nend run\r\n");
        exit;
    }else{
        //輸出並記錄當前狀態
        fwrite($fp, $i." ".connection_status()." ".connection_aborted()." ".time()."\r\n");
        echo $i." ".connection_status()." ".connection_aborted()." ".time()."\r\n";
        //下面是刷新php緩衝區,並立刻向客戶端發送緩衝區內容
        ob_flush();//刷新php緩衝區
        flush();//全部輸出發送到用戶的瀏覽器
        ob_end_flush();
    }
    sleep(2);//ZZZzzzz.....
}
ob_end_clean();
fwrite($fp, "end run\r\n");
fclose($fp);
相關文章
相關標籤/搜索