程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> PHP積極斷開與浏覽器的連接

PHP積極斷開與浏覽器的連接

編輯:關於PHP編程

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

      曾經整理過一篇《關於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();

    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved