這篇文章運用簡單易懂的例子給大家介紹PHP中ob緩存的應用,代碼非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
php緩存過程
在請求一個PHP的過程中,實際上經過三個緩存:
1.程序緩存
2.ob緩存
3.瀏覽器緩存.
開啟ob的兩個方法
1.在php.ini 配置 ;output_buffering = 4096 這里去掉;號即可
2 在php頁面中使用 ob_start();
通過php.ini 打開的,則作用于所有的php頁面 。使用ob_start()打開則只作用于該頁面
ob緩存的知識點
在服務中,如果我們開啟了ob緩存,則echo數據首先放入到ob中
當PHP頁面執行到最后,則會把ob緩存的數據(如果有的話), 強制刷新到程序緩存,然后通過apache對數據封裝成http響應包,返 回給瀏覽器
如果沒有ob,所有的數據直接放入程序緩存。 header信息不管你是否開啟ob,總是放入到程序緩存。
注意:在程序中如果開啟ob_start(),所有的echo輸出都會保存到ob緩存中,可以使用ob系列函數進行操作,如果沒有,默認情況下,在程序執行結束,會把緩存中的數據發送給瀏覽器,如果,你使用ob_clean()類似的函數,會情況緩存中的內容,那么就不用有數據發送給瀏覽器
ob相關的函數
ob_start($callback)
//在當前頁面中開啟ob,注意callback ob_start($callback);
ob_get_contents()
//獲取當前ob緩存中的內容 ob_get_contents()
ob_get_clean()
//獲取當前ob緩存中的內容,并且清空當前的ob緩存 ob_get_clean()
ob_flush()
//將ob緩存中的內容,刷到程序緩存中,但并沒有關閉ob緩存 ob_flush()
ob_end_flush()
//關閉ob緩存,并將數據刷回到程序緩存中 ob_end_flush()
ob_clean()
//將ob緩存中的內容清空 ob_clean()
ob_end_clean()
//將ob緩存中的數據清空,并且關閉ob緩存 ob_end_clean()
注意ob_start($callback)的回調
<?php ob_start("callback_func"); function callback_func($str){ return "callback".$str; } echo "123";//輸出:callback123
應用場景
在header()發送之前的報錯
出錯代碼
<?php echo "before_header"; header("Content-type:text/html;charset=utf-8"); echo "after_header";
輸出:
Warning: Cannot modify header information - headers already sent by (output started at /Users/shuchao/Desktop/test.php:2) in /Users/shuchao/Desktop/test.php on line 3
解決辦法
在發送header前開啟ob,則所有的echo內容都會到ob里面,從而解決錯誤。
<?php ob_start(); echo "before_header\n"; header("Content-type:text/html;charset=utf-8"); echo "after_header\n";
輸出
before_header after_header
關于PHP中ob緩存的應用就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。