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