溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

PHP中ob緩存的應用

發(fā)布時間:2020-07-03 17:31:54 來源:億速云 閱讀:431 作者:元一 欄目:編程語言

這篇文章運用簡單易懂的例子給大家介紹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)容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI