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

首頁 > 開發 > PHP > 正文

淺談PHP中output_buffering

2024-05-04 23:37:42
字體:
來源:轉載
供稿:網友

這篇文章主要介紹了淺談PHP中output_buffering的相關資料,需要的朋友可以參考下

一、我們要說一下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)

 

 
  1. for($i=0; $i<5; $i++){  
  2.  
  3. echo $i.'<br>';  
  4.  
  5. sleep(1);  
  6.  

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

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

 

 
  1. echo str_repeat(" ",1024);//這里重復輸出一個空白 
  2. for($i=0; $i<5; $i++){  
  3. echo $i."<br/>"
  4. flush();  
  5. sleep(1);  

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

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

 

 
  1. for($i=0; $i<5; $i++){  
  2. echo file_get_contents('f.txt').$i.'<br/><br/><br/><br/>';  
  3. sleep(2);  

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

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

 

 
  1. ob_start();  
  2. for($i=0; $i<5; $i++){  
  3. echo file_get_contents('f.txt').$i.'<br/><br/><br/><br/>';  
  4. sleep(2);  

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

e、output_buffering=On,使用ob_start()

 

 
  1. ob_start(); 
  2. echo "abc-"
  3. header("content-type:text/html;charset=utf-8"); 
  4. echo "hello-"
  5. ob_end_flush(); 
  6. echo "aa-"
  7. echo ob_get_contents(); 

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

f、output_buffering=Off,使用ob_start()

 

 
  1. ob_start(); 
  2. echo "abc-"
  3. header("content-type:text/html;charset=utf-8"); 
  4. echo "hello-"
  5. ob_end_flush(); 
  6. echo "aa-"
  7. 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
日韩av影视综合网| 欧美一区二区.| 国产精品r级在线| 精品久久久中文| 欧美性黄网官网| 日韩高清人体午夜| 精品国产乱码久久久久久婷婷| 在线看片第一页欧美| 日韩高清a**址| 亚洲最大av在线| 成人精品视频在线| 国产97免费视| 亚洲精品视频免费| 久久久精品美女| 国产精品ⅴa在线观看h| 色多多国产成人永久免费网站| 国产日韩欧美自拍| 久久久久久69| 欧美激情a∨在线视频播放| 成人妇女免费播放久久久| 久久精品视频一| 色综合五月天导航| 日韩最新在线视频| 国产做受高潮69| 亚洲欧美一区二区三区久久| 久久中文字幕视频| 国产成人一区二| 欧美激情xxxx性bbbb| 久久久久久亚洲精品不卡| 亚洲国产日韩欧美综合久久| 亚洲激情国产精品| 国产精品三级久久久久久电影| 日本免费在线精品| 亚洲色图美腿丝袜| 亚洲综合中文字幕68页| 日韩av电影国产| 亚洲精品美女网站| 欧美亚洲成人网| 97人人爽人人喊人人模波多| 美女啪啪无遮挡免费久久网站| 中文字幕日本精品| 最近2019好看的中文字幕免费| 日韩人体视频一二区| 国产成人精品一区| 久久精品最新地址| 欧美激情视频一区| 国产成人福利夜色影视| 欧美激情国产日韩精品一区18| 中文字幕欧美精品在线| 91av视频导航| 国产成人鲁鲁免费视频a| 久久久久国产视频| 欧美日韩中文在线观看| 最近2019中文字幕一页二页| 日本视频久久久| 久久精品视频在线播放| 成人网页在线免费观看| 亚洲第一国产精品| 免费91麻豆精品国产自产在线观看| 日韩成人在线视频观看| 久99久在线视频| 国产99久久精品一区二区永久免费| 国产精品久久久久999| 国产欧美精品日韩精品| 亚洲国产精品资源| 久久成人精品电影| 国产一区二区三区视频免费| 日韩成人激情在线| 亚洲一区制服诱惑| 亚洲精品久久在线| 成人久久一区二区三区| 国产精品激情av电影在线观看| 91在线高清免费观看| 欧美午夜性色大片在线观看| 日韩在线免费视频观看| 欧美电影在线观看完整版| 欧美成人精品不卡视频在线观看| 久久久久久久一区二区三区| 日韩在线国产精品| 98精品国产自产在线观看| 亚洲乱码国产乱码精品精天堂| 欧美高清在线播放| 精品国内产的精品视频在线观看| 最近2019中文免费高清视频观看www99| 欧美国产日韩在线| 亚洲视频在线播放| 欧美黑人国产人伦爽爽爽| 亚洲二区中文字幕| 91精品国产电影| 国产日韩欧美日韩| www.亚洲免费视频| 91禁国产网站| 成人a免费视频| 国产亚洲一区二区在线| 日韩国产高清视频在线| 68精品国产免费久久久久久婷婷| 精品香蕉一区二区三区| 国产成人鲁鲁免费视频a| 亚洲图片在线综合| 另类专区欧美制服同性| 亚洲xxx自由成熟| 亚洲欧美在线磁力| 成人网在线视频| www.久久撸.com| 视频在线观看一区二区| 久久五月情影视| 欧美精品激情blacked18| 日韩成人免费视频| 亚洲毛片在线看| 日韩女优在线播放| 91日韩在线播放| 久久好看免费视频| 日韩美女av在线免费观看| 国产69精品久久久| 欧美高清视频一区二区| 日本精品一区二区三区在线| 日韩欧美国产黄色| 日本乱人伦a精品| 日本国产欧美一区二区三区| 欧美日韩另类在线| 日韩第一页在线| 国产精品黄色影片导航在线观看| 国产日韩在线一区| 欧美交受高潮1| 精品成人在线视频| 日韩一级裸体免费视频| 亚洲一区制服诱惑| 欧美午夜精品在线| 欧美日韩人人澡狠狠躁视频| 日本高清+成人网在线观看| 高清欧美一区二区三区| 日韩电影大片中文字幕| 欧美成人免费观看| 色婷婷亚洲mv天堂mv在影片| 精品五月天久久| 日韩精品久久久久| 亚洲国产美女精品久久久久∴| 亚洲片在线观看| 性色av一区二区三区免费| 亚洲欧美一区二区三区久久| 国产日韩欧美91| 久久手机免费视频| 亚洲视频综合网| 精品一区二区电影| 日韩av最新在线| 日韩av在线天堂网| 91天堂在线视频| 国产精品一区二区三区在线播放| 欧美激情免费观看| 久久影视电视剧免费网站| 中文字幕久久久| 久久精品国产v日韩v亚洲| 欧美成人精品在线播放| 日韩精品免费一线在线观看| 欧美一区二区三区免费观看| 欧美精品videosex极品1| 一区二区欧美激情| 午夜剧场成人观在线视频免费观看| 久久久久久久久久亚洲| 日韩av大片在线| 久久久亚洲福利精品午夜| 日韩一级黄色av| 中文字幕在线国产精品| 亚洲免费影视第一页|