PHP快取機制Output Control詳解

2022-09-28 03:03:14 字數 2243 閱讀 9742

在php5.2版本的配置中,預設output_buffering為關閉狀態,因此執行下面三行**將會出現乙個警告:

warning: cannot modify header information - headers already sent

tozospdecho '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();

開啟輸出緩衝。當輸出緩衝啟用後,指令碼將不會輸出內容(除h程式設計客棧ttp標頭外),相反需要輸出的內容被儲存在內部緩衝區中。

內部緩衝區的內容可以用 ob_get_contents() 函式複製到乙個字串變數中。 想要輸出儲存在內部緩衝區中的內容,可以使用 ob_end_flush() 函式。另外, 使用 ob_end_clean() 函式會靜默丟棄掉緩衝區的內程式設計客棧容。

/*** output_buffering = off 情況下測試

*/ob_start(); /www.cppcns.com/開啟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,瀏覽器輸出hello1 */

/* 若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++)

本文標題: php快取機制output control詳解

本文位址:

PHP快取機制

普遍快取技術 資料快取 這裡所說的資料快取是指資料庫查詢php快取機制,每次訪問頁面的時候,都會先檢測相應的快取資料是否存在,如果不存在,就連線資料庫,得到資料,並把查詢結果序列化後儲存到檔案中,以後同樣的查詢結果就直接從快取表或檔案中獲得。用的最廣的例子看discuz的搜尋功能,把結果id快取到乙...

php快取機制

資料快取 這裡所說的資料快取是指資料庫查詢快取,每次訪問頁面的時候,都會先檢測相應的快取資料是否存在,如果不存在,就連線資料庫,得到資料,並把查詢結果序列化後儲存到檔案中,以後同樣的查詢結果就直接從快取表或檔案中獲得。用的最廣的例子看discuz的搜尋功能,把結果id快取到乙個表中,下次搜尋相同關鍵...

php快取機制

普遍快取技術 資料快取 這裡所說的資料快取是指資料庫查詢快取,每次訪問頁面的時候,都會先檢測相應的快取資料是否存在,如果不存在,就連線資料庫,得到資料,並把查詢結果序列化後儲存到檔案中,以後同樣的查詢結果就直接從快取表或檔案中獲得。用的最廣的例子看discuz的搜尋功能,把結果id快取到乙個表中,下...