從php腳本echo(print、print_r...)內容以後,是如何顯示給用戶的呢,下面看看流程:php
echo、print => php output_buffering => webServer buffer => browser buff => browser displaynginx
即:腳本輸出 => php的緩衝區設置 => 系統的緩衝區設置(apache、nginx) => 瀏覽器的緩衝區設置 => 顯示給用戶web
當PHP腳本有輸出時,輸出控制函數能夠用這些來控制輸出。這在多種不一樣狀況中很是有用,尤爲是用來在腳本開始輸出 數據後,發送http頭信息到瀏覽器。輸出控制函數不影響由 header() 或 setcookie()發送的文件頭信息,僅影響象 echo這樣的函數和PHP代碼塊間的數據。apache
名字 | 默認 | 可修改範圍 | 更新日誌 |
---|---|---|---|
output_buffering | "0" | PHP_INI_PERDIR | |
output_handler | NULL | PHP_INI_PERDIR | 自 PHP 4.0.4 起可用 |
implicit_flush | "0" | PHP_INI_ALL | 在 PHP <= 4.2.3 版本中是 PHP_INI_PERDIR |
output_buffering
boolean/integer瀏覽器
該選項設置爲 On 時,將在全部的腳本中使用輸出控制。若是要限制輸出緩衝區的最大值,可將該選項設定爲指定的最大字節數(例如 output_buffering=4096)。從PHP 4.3.5 版開始,該選項在 PHP-CLI 下老是爲 Off。服務器
output_handler
stringcookie
該選項可將腳本全部的輸出,重定向到一個函數。例如,將 output_handler 設置爲 mb_output_handler() 時,字符的編碼將被修改成指定的編碼。設置的任何處理函數,將自動的處理輸出緩衝。函數
implicit_flush
boolean性能
默認爲 FALSE
。如將該選項改成 TRUE
,PHP 將使輸出層,在每段信息塊輸出後,自動刷新。這等同於在每次使用 print、echo 等函數或每一個 HTML 塊以後,調用 PHP 中的 flush() 函數。編碼
不在web環境中使用 PHP 時,打開這個選項對程序執行的性能有嚴重的影響,一般只推薦在調試時使用。在 CLI SAPI 的執行模式下,該標記默認爲 TRUE
。
void flush(void); //沖刷服務器緩衝內容 bool ob_start([callback $fun, int $size, bool $erase]); //新建一個緩衝區 void ob_clean(void); //清空緩衝區內容 void ob_flush(void); //沖刷緩衝區內容 string ob_get_contents(void); //返回緩衝區的內容 bool ob_end_clean(void); //清空緩衝區內容並關閉緩衝區 bool ob_end_flush(void); //沖刷緩衝區內容並關閉緩衝區
4.1,關閉PHP緩衝區,隨時輸出
ob_end_clean(); //關閉默認緩衝區 echo 'hello '; flush(); //刷新服務器緩衝 sleep(3); echo 'world'; //3秒後輸出world flush();
4.2,啓用PHP緩衝區,主動刷新緩衝
//每秒輸出一句hello world ob_end_clean(); //關閉默認緩衝區 ob_start(); //打開新的緩衝區 for($i = 0; $i < 10; $i ++){ sleep(1); echo 'hello world <br />'; ob_flush(); flush(); } ob_end_clean(); //關閉緩衝區
4.3,保存回顯內容到文件
ob_end_clean(); //關閉默認緩衝區 ob_start(); //打開新的緩衝區 print_r($_SERVER); //放入內容到緩衝區 $data = ob_get_contents(); //獲得緩衝區內容 ob_end_clean(); //清空並關閉緩衝區 file_put_contents('txt', $data); //寫入內容到文件