PHP緩衝機制Output Control詳解,outputcontrol_PHP教程

來源:互聯網
上載者:User

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為關閉狀態,因此運行下面三行代碼將會出現一個警告:...

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.