PHP主動斷開與瀏覽器的連接
- php語言
- 關注:1.23W次
導語:曾經整理過一篇《關於PHP連接處理中set_time_limit()、connection_status()和ignore_user_abort()深入解析》,是講解瀏覽器客户端斷開時,服務器PHP腳本的處理。本站小編將講解一下服務器PHP腳本怎樣主動斷開與瀏覽器的連接,主要方法是使用http協議header中的Content-Length和Connection
Content-Length的`作用:瀏覽器接收到指定Content-Length大小的消息實體後,則會斷開與服務器的連接。
Connection的作用:瀏覽器接收到Connection的Close或Keep-Alive後,決定是關閉連接還是繼續使用當前的連接進下一次請求。
/**
* 自動斷開與瀏覽器的連接
* jiaofuyou
*/
echo '1234567890'; //向瀏覽器輸出的內容
{//斷開連接的代碼
$size=ob_get_length();
header("Content-Length: $size"); //告訴瀏覽器數據長度,瀏覽器接收到此長度數據後就不再接收數據
header("Connection: Close"); //告訴瀏覽器關閉當前連接,即為短連接
ob_flush();
flush();
}
error_log(date("[Y-m-d H:i:s]")." > "."start" ."n", 3 , "/usr/local/apache2219/logs/php_log");
//斷開連接後的執行長時間操作
sleep(5);
echo 'test213';//瀏覽器接收不到了
error_log(date("[Y-m-d H:i:s]")." > "."end" ."n", 3 , "/usr/local/apache2219/logs/php_log");
//可以查看錯誤日誌是否延遲5秒後執行.
?>
説明:
1、單獨使用Content-length實際上連接並未斷開,僅是瀏覽器停止接收信息,Connection: Close才是真正的告訴瀏覽器關閉連接。
2、指定Content-Length 對於 file_get_contents 沒有任何意義;若想使用,請用curl。
如果想讓PHP不停的向瀏覽器輸出內容:
echo "1234567890"
ob_flush();
flush();
這樣是不會立刻輸出到瀏覽器的,可以這樣
echo "1234567890
"
//有換行時會立刻輸出到瀏覽器
ob_flush();
flush();
或者:
echo "1234567890"
print str_pad("",10000); //輸出足夠多的內容
ob_flush();
flush();
- 文章版權屬於文章作者所有,轉載請註明 https://xuezhezhai.com/zh-hk/jsj/php/vjn4g5.html