PHP主動斷開與瀏覽器的連接

rico214 8年前發布 | 9K 次閱讀 PHP開發

來自: http://blog.csdn.net//jiao_fuyou/article/details/30617155


曾經整理過一篇《關于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后,決定是關閉連接還是繼續使用當前的連接進下一次請求。

<?php

   /**
    * 自動斷開與瀏覽器的連接
    * 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();


 本文由用戶 rico214 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!