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

字號:


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