http://www.php20.cn/article/104
傳統的web php的輸出數據,例如echo var_dump ....等等輸出函數(語句)是經過了幾個步驟,最終到瀏覽器展示的呢?
以下是PHP的輸出流程
php echo,var_dump -> php output_buffering -> webServer buffer-> browser buff-> browser display
php輸出語句/函數->php緩衝區配置->web服務器緩衝區配置->瀏覽器緩衝區->瀏覽器顯示
本文主要講解php的緩衝區
php緩衝區配置主要由php.ini 中的output_buffering配置的,在默認情況下,output_buffering=4096
當php輸出數據時,輸出的數據將會先經過output_buffering中,直到數據大於output_buffering配置的值或者php文件執行完畢,則會將數據輸出
以下是一個代碼示例:
該代碼主要說明了php緩衝區的,先開啓緩衝區,循環輸出100的值,當值爲偶數時,關閉並重新開啓緩衝區,期間輸出$i的值
輸出結果爲:
同理,當在web訪問時,php默認開啓4096的緩衝區,當裏面存取的字符串長度超過時,將會進行一次輸出到web服務器,可通過ob_start()和ob_end_flush進行直接的緩衝區控制(此間將會無視output_buffering的值)
注意:php-cli默認關閉緩衝區並且無視output_buffering的值,需要通過ob_start()函數進行打開
ini_set無法修改output_buffering的配置
當php.ini中php buffer是關閉的,再次調用ob_end_flush()會報warning。
至於爲什麼web瀏覽器不能查看到分段輸出的值,原因爲:
web服務器還有一次緩衝區
關於http分段輸出 http://blog.csdn.net/xifeijian/article/details/42921827
經過幾天的研究,關於瀏覽器分段輸出的代碼:(高版本下apache默認開啓buffer,可通過配置httpd.conf,設置FcgidOutputBufferSize 0來保證不緩存)
1 2 3 4 5 6 7 8 9 10 |
|
nginx分段輸出:
1 2 3 4 5 6 7 8 9 |
|
輸出結果爲: