亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 網站 > 建站經驗 > 正文

淺談PHP中output_buffering

2024-04-25 20:39:01
字體:
來源:轉載
供稿:網友

一、我們要說一下php中的緩存大概有哪些!

在PHP中,我們可以粗略的將緩存分為客戶端緩存(Browser緩存),服務器端緩存(Server緩存)。由于PHP是基于B/S架構的,所以,我們可以理解為瀏覽器端的緩存,服務器端緩存。

在服務器端PHP自帶的緩存中,主要可以分為兩大類緩存!程序緩存和OB緩存!這也是我們學習服務器端緩存的主要內容!

在PHP中緩存的輸出順序為:

打開了php輸出緩存: echo,print -> php output_buffering -> server buffering -> browser buffering -> browser display

未打開php輸出緩存: echo,print -> server buffering -> browser buffering -> browser display

瀏覽器的輸出緩存:IE為256Bytes, Chrome與FireFox為1000Bytes,只有輸出數據達到了這個長度或者腳本結束瀏覽器才會將數據輸出在頁面上。

二、服務器端的響應流程

A、客戶端向服務器端發送請求響應!

B、Apache服務器加載了PHP模塊,開啟相應的進程(或線程)運行相應的PHP腳本頁面!

C、在沒有開啟OB緩存的情況下,運行的結果全部都會被放到程序緩存中,然后打包發送給瀏覽器!瀏覽器對頁面進行渲染,生成我們最后看到的WEB頁面!

D、在開啟了OB緩存的情況下,運行的結果會被分別放入到OB緩存和程序緩存中,當程序運行到最后一行的時候,就會將OB緩存中的數據刷回到程序緩存中,然后打包返回給瀏覽器!瀏覽器對頁面進行渲染,生成我們看到的WEB頁面!

三、OB緩存的常見用法!

a、output_buffering=4096,輸出較少的數據(少于一個buffer)

for($i=0; $i<5; $i++){

echo $i.'<br>';

sleep(1);

}

運行結果:等所有腳本全部運行完成后,才輸出,因為數據未滿一個buffer的大小。

b、output_buffering=4096,輸出較少的數據(少于一個buffer),關閉output_buffering,修改php.ini的output_buffering=0

echo str_repeat(" ",1024);//這里重復輸出一個空白

for($i=0; $i<5; $i++){

echo $i."<br/>";

flush();

sleep(1);

}

運行結果:因為禁用了OB,不需要等到腳本運行完畢就可以輸出,數據沒有在OB停留,可以看到斷斷續續間歇性輸出。echo ->browser buffering -> browser display

c、output_buffering=4096,輸出較大數據(大于一個buffer),不使用ob_start()

for($i=0; $i<5; $i++){

echo file_get_contents('f.txt').$i.'<br/><br/><br/><br/>';

sleep(2);

}

運行結果:f.txt為一個大于4kb的文件,因為大于buffer默認值,buffer空間不夠用,每當滿一個buffer就會輸出,所以可以看到間歇性輸出。

d、output_buffering=4096,輸出較大數據(大于一個buffer),使用ob_start()

ob_start();

for($i=0; $i<5; $i++){

echo file_get_contents('f.txt').$i.'<br/><br/><br/><br/>';

sleep(2);

}

運行結果:因為使用了ob_start(),會為buffer設置足夠大的空間,因此會保存到腳本執行完畢后才會輸出。

e、output_buffering=On,使用ob_start()

ob_start();

echo "abc-";

header("content-type:text/html;charset=utf-8");

echo "hello-";

ob_end_flush();

echo "aa-";

echo ob_get_contents();

運行結果:abc-hello-aa-abc-hello-aa-

f、output_buffering=Off,使用ob_start()

ob_start();

echo "abc-";

header("content-type:text/html;charset=utf-8");

echo "hello-";

ob_end_flush();

echo "aa-";

echo ob_get_contents();

運行結果:abc-hello-aa-

輸出緩沖區是可堆疊的,這即意謂著,當有一個 ob_start() 是活躍的時, 你可以調用另一個 ob_start() 。 只要確保又正確調用了 ob_end_flush() 恰當的次數即可。 如果有多重輸出回調函數是活躍的,輸出內容會一直按嵌套的順序依次通過它們而被過濾。

注意:PHP5.2中,OB默認是關閉的,5.3之后默認是開啟的;

常用方法:

1.ob_start

激活output_buffering機制,一旦激活,腳本不再直接輸出到瀏覽器,而是暫時寫入php buffering區域。直到腳本運行完畢后,才發送。

2.ob_get_contents

獲取php buffering中的數據,注意:要在ob_end_clean()前調用,否則只會得到空字符。

3.ob_end_flush 和 ob_end_clean

ob_end_flush 會輸出php buffering 中的數據,但不會清空。

ob_end_clean 不會輸出,只會清空php buffering中的數據。

4.ob_flush 、flush、ob_implicit_flush

ob_flush 會刷新php buffering 中的數據到程序緩存

flush 則會刷新程序緩存到瀏覽器緩存中

ob_implicit_flush 將打開或關閉絕對(隱式)刷送。絕對(隱式)刷送將導致在每次輸出調用后有一次刷送操作,以便不再需要對 flush() 的顯式調用

四、OB緩存的作用!

OB緩存在各個方面都有應用,但是,本人知道的主要是在兩個方面!

a、當網站準備做網站靜態化的時候,選擇OB緩存是一個不錯的選擇!

b、解決Warning: Cannot modify header information - headers already sent by的錯誤!

究其發生錯誤的原因:是因為響應頭和相應主體位置錯位導致的!正常情況下,服務器返回給瀏覽器的相應內容,應該是:響應頭+響應主體!

但是,如果我們開啟了OB緩存,那么相應頭信息(一般也就是header()函數進行設置的信息),會被放入到程序緩存中!

而其他的輸出內容,如:echo print_r var_dump 等,都會先被放入OB緩存中!

等程序結束的時候,或者OB緩存關閉的實話,將OB緩存的內容在放入程序緩存中!從而保證響應頭信息,始終在響應主體內容之前!

以上所述就是本文的全部內容了,希望大家能夠喜歡。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩专区中文字幕| 91精品国产高清自在线看超| 亚洲va久久久噜噜噜久久天堂| 国产精品天天狠天天看| 在线亚洲欧美视频| 777777777亚洲妇女| 亚洲国产精品va在线观看黑人| 亚洲欧美日韩图片| 在线亚洲男人天堂| 久久久久久久久久久国产| 上原亚衣av一区二区三区| 欧美天天综合色影久久精品| 麻豆乱码国产一区二区三区| 国产精品96久久久久久| 91精品国产91久久久久福利| 日韩在线观看精品| 欧美激情第6页| 精品视频久久久久久久| 亚洲在线视频福利| 国产成人一区三区| 午夜精品99久久免费| 久久久久久久久网站| 欧美精品videosex牲欧美| 日韩成人av一区| 欧美久久精品午夜青青大伊人| 国产精品一区二区三区在线播放| 日韩黄色在线免费观看| 成人免费午夜电影| 日韩日本欧美亚洲| 亚州精品天堂中文字幕| 最近2019中文字幕大全第二页| 亚洲人高潮女人毛茸茸| 欧美电影免费观看高清| 日韩在线欧美在线国产在线| 国产精品96久久久久久又黄又硬| 国产在线视频不卡| 精品成人av一区| 中文字幕久热精品在线视频| 亚洲成人激情图| 日韩视频在线免费观看| 久久久久国产一区二区三区| 国产精品久久久久久久9999| 国产一区二区香蕉| 国产日本欧美一区二区三区| 国产精品户外野外| 成人免费激情视频| 国产精品福利网| 欧美激情视频在线观看| 伊人男人综合视频网| 国产一区二区香蕉| 欧美日韩免费区域视频在线观看| 欧美日韩人人澡狠狠躁视频| 色婷婷av一区二区三区久久| 亚洲欧美国产一区二区三区| 亚洲无限av看| 欧美高清在线观看| 少妇高潮久久77777| 精品久久久久久电影| 久久成人精品一区二区三区| 国产精品免费小视频| 欧美一区深夜视频| 国产精品一区二区久久精品| 综合av色偷偷网| 欧美视频精品一区| 亚洲精品久久久久中文字幕二区| 亚洲高清av在线| 91精品视频大全| 92福利视频午夜1000合集在线观看| 国产日产久久高清欧美一区| 国产欧美一区二区三区在线看| 国产精品第三页| 欧美大片免费观看在线观看网站推荐| 日韩一区二区三区xxxx| 中文字幕亚洲欧美日韩高清| xxx欧美精品| 第一福利永久视频精品| 精品免费在线观看| 一区二区三区无码高清视频| 欧美日本精品在线| 国产一区二区三区久久精品| 欧美一区二区三区……| 欧美黑人视频一区| 久久久久亚洲精品国产| 高清亚洲成在人网站天堂| 欧美成人一二三| 国产精品成人品| 国产在线视频欧美| 中文字幕日韩在线播放| 欧美日韩亚洲高清| 97视频在线观看成人| 国产精品高精视频免费| 色噜噜国产精品视频一区二区| 日韩毛片在线观看| 久久国产一区二区三区| 欧美中文字幕视频在线观看| 一本色道久久综合狠狠躁篇的优点| 成人福利在线视频| 亚洲影院高清在线| 亚洲v日韩v综合v精品v| 国外成人在线视频| 91精品综合视频| 国产精品va在线| 亚洲精品videossex少妇| 久青草国产97香蕉在线视频| 欧美高清视频免费观看| 国产精品一区二区三区久久久| 一色桃子一区二区| 欧美电影在线观看网站| 欧美日韩一区二区免费在线观看| 国产精品亚洲综合天堂夜夜| 亚洲视频网站在线观看| 欧美激情视频一区二区| 亚洲xxxx做受欧美| 中文字幕亚洲欧美日韩在线不卡| 91久久精品国产91性色| 亚洲国产精品成人精品| 亚洲综合在线播放| 欧美激情精品久久久| 国产一区二区三区在线| 日韩av影片在线观看| 成人美女免费网站视频| 色综合伊人色综合网| 成人精品视频99在线观看免费| 国产精品日韩欧美综合| 中文字幕亚洲欧美| 亚洲电影免费观看高清完整版在线| 九九热这里只有精品6| 久久乐国产精品| 亚洲午夜色婷婷在线| 久久全球大尺度高清视频| 国产精品久久久久久av福利| 中文字幕v亚洲ⅴv天堂| 亚洲成人av中文字幕| 中文字幕亚洲欧美| 欧美最猛黑人xxxx黑人猛叫黄| 永久免费毛片在线播放不卡| 欧美成人免费播放| 亚洲国产成人爱av在线播放| 欧美精品激情blacked18| 国产精品久久久久久一区二区| 久久久久久久久久av| 97超碰蝌蚪网人人做人人爽| 日韩精品在线观看一区| 亚洲乱码一区二区| 欧美激情亚洲一区| 亚洲性视频网址| 亚洲直播在线一区| 国产在线日韩在线| 欧美日韩成人在线观看| 高清在线视频日韩欧美| 91在线观看免费高清完整版在线观看| 国产欧美久久久久久| 国产99久久久欧美黑人| 精品综合久久久久久97| 青青久久av北条麻妃黑人| 久久免费视频网站| 久久久久一本一区二区青青蜜月| 欧美日韩中文字幕在线| 久久久久久久久亚洲| 91精品国产亚洲| 亚洲欧美在线第一页| 亚洲a在线观看| 国产成人在线一区| 国产精品99久久久久久人|