PHP緩衝機制Output Control詳解,outputcontrol
在php5.2版本的配置中,預設output_buffering為關閉狀態,因此運行下面三行代碼將會出現一個警告:
Warning: Cannot modify header information - headers already sent
echo 'hello1';header('content-type:text/html;charset=utf-8');echo 'hello2';
開啟OB緩衝的方式有如下兩種:
1. php.ini中開啟 output_buffering = 4096
啟用了此指令,那麼每個PHP指令碼都相當於一開始就調用了ob_start()函數,PHP5.5預設已開啟output_buffering = 4096
2. 直接在程式中使用 ob_start();
開啟輸出緩衝。當輸出緩衝啟用後,指令碼將不會輸出內容(除http標題外),相反需要輸出的內容被儲存在內部緩衝區中。
內部緩衝區的內容可以用 ob_get_contents() 函數複製到一個字串變數中。 想要輸出儲存在內部緩衝區中的內容,可以使用 ob_end_flush() 函數。另外, 使用 ob_end_clean() 函數會靜默丟棄掉緩衝區的內容。
/** * output_buffering = off 情況下測試 */ob_start(); //開啟ob緩衝echo 'hello1'; //存入ob緩衝header('content-type:text/html;charset=utf-8');//存入程式緩衝//ob_end_clean(); //清空ob緩衝,並關閉ob緩衝echo 'hello2'; //存入ob緩衝$str = ob_get_contents(); //返回ob緩衝的資料(不清除緩衝內容)file_put_contents('ob.txt', $str); //把$str儲存到檔案//ob_clean(); //清空ob緩衝echo 'hello3'; //存入ob緩衝echo 'hello4'; //存入ob緩衝/* 此指令碼將產生ob.txt檔案,存入hello1hello2,瀏覽器輸出hello1hello2hello3hello4 *//* 若ob_clean()注釋開啟,那麼產生的ob.txt檔案中將沒有內容,瀏覽器輸出hello3hello4 *//* 若ob_end_clean()注釋開啟,那麼ob.txt中依然沒有內容,因為關閉了ob緩衝,瀏覽器輸出hello2hello3hello4 */
ob_flush() 與 ob_end_flush() 例子:
ob_start();echo 'abc';//存入ob緩衝header('content-type:text/html;charset=utf-8'); //存入程式緩衝echo 'hello'; //存入ob緩衝ob_flush();//將ob緩衝中的內容輸出到程式緩衝,清空ob緩衝,不關閉ob緩衝//ob_end_flush() //將ob緩衝中的內容輸出到程式緩衝,清空ob緩衝,關閉ob緩衝echo 'aa'; //存入ob緩衝echo ob_get_contents();/* 最後輸出abchelloaaaa *//* 注釋ob_flush,開啟ob_end_flush,最後輸出abchelloaa */
注意:
在output_buffering = 4096開啟的情況下,ob_end_clean()只關閉一次ob緩衝(即ob_start開啟的),系統的並未關閉。
ob_end_flush()同理。
OB緩衝的運行原理/原則:
1. ob緩衝開啟,echo的資料首先放入ob緩衝
2. 如果是header資訊,直接放在程式緩衝
3. 當頁面執行到最後,會把ob緩衝的資料放到程式緩衝,然後一次返回給瀏覽器
最後還有一個flush(); 強制重新整理PHP程式緩衝到瀏覽器緩衝。
特性:一些版本的 Microsoft Internet Explorer 只有當接受到的256個位元組以後才開始顯示該頁面,所以必鬚髮送一些額外的空格來讓這些瀏覽器顯示頁面內容。
echo str_repeat('', 1024);//重複輸出多個字元(解決瀏覽器緩衝256位元組之後再輸出的情況)for($i=0; $i < 5; $i++){ echo $i; flush(); //強制重新整理程式緩衝到瀏覽器緩衝 sleep(1); //休眠1秒鐘,http串連未斷開,每隔1秒輸出$i}
php 中怎使用緩衝,使用哪種緩衝機制最好;
這要根據你的實際情況來定,有檔案快取,資料庫緩衝,還有memcache緩衝。。。。。
php的緩衝機制有什?
主要有:
①普遍緩衝技術②頁面緩衝③時間觸發緩衝④內容觸發緩衝⑤靜態緩衝(就產生html檔案)
⑥記憶體緩衝⑦php的緩衝器⑧MYSQL緩衝⑨基於反向 Proxy的Web緩衝,DNS輪詢
但是一般常用的就 ①②④,其他的是網站資料量大,互動多,為減小伺服器壓力才用到
參考資料:blog.163.com/...44905/
http://www.bkjia.com/PHPjc/840629.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/840629.htmlTechArticlePHP緩衝機制Output Control詳解,outputcontrol 在php5.2版本的配置中,預設output_buffering為關閉狀態,因此運行下面三行代碼將會出現一個警告:...