標籤:content-length 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後,決定是關閉串連還是繼續使用當前的串連進下一次請求。
<?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();