国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > PHP > 正文

Php output buffering緩存及程序緩存深入解析

2024-05-04 23:12:09
字體:
供稿:網(wǎng)友
下面測(cè)試ob緩存和程序緩存:
在測(cè)試前為了測(cè)試效果更明顯,我們?cè)趐hp.ini里先關(guān)閉ob緩存并設(shè)置明顯的錯(cuò)誤級(jí)別。
Output_buffering=off
Display_errors=on
代碼1:

復(fù)制代碼 代碼如下:


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


則會(huì)出現(xiàn)
php
Warning: Cannot modify header information - headers already sent by (output started at D:/www/apache/htdocs/test/t2.php:2) in D:/www/apache/htdocs/test/t2.php on line 3
ok
代碼2:

復(fù)制代碼 代碼如下:


ob_start();
 echo "php";
 header("content-type:text/html;charset='utf-8'");
 echo 'ok';


結(jié)果就完全正確了

原因分析:
代碼1:Php在echo ‘php'時(shí)已經(jīng)向?yàn)g覽器發(fā)送一個(gè)頭信息,
當(dāng)再出現(xiàn)
header("content-type:text/html;charset='utf-8'");
又看到一個(gè)頭信息,這時(shí)已經(jīng)打回了上面的頭信息,無法更該便出錯(cuò)了。
代碼2:開啟了ob緩存,echo ‘php'時(shí)把要打給瀏覽器的數(shù)據(jù)先放到ob緩存里,之后又遇到一個(gè)頭信息,也放入Ob緩存,頁面結(jié)束時(shí)再按http協(xié)議到程序緩存后返回給瀏覽器。
為加深理解再看以下代碼
代碼3:

復(fù)制代碼 代碼如下:


ob_start();
echo "php";
header("content-type:text/html;charset='utf-8'");
echo 'ok';
echo '<hr/>';
$ob=ob_get_contents();
echo $ob;


會(huì)輸出

Php output buffering緩存及程序緩存深入解析


Ob_get_contents()只是取得ob緩存里的內(nèi)容而不清楚它們
Ob_get_contents()必須在ob緩存沒有清除前使用
代碼4:

復(fù)制代碼 代碼如下:


ob_start();
 echo "php";
 ob_clean();//清除緩存內(nèi)容但不關(guān)閉緩存區(qū),還能用(往里添加?xùn)|西)
 header("content-type:text/html;charset='utf-8'");
 echo 'ok';
 echo '<hr/>';
 $ob=ob_get_contents();
 echo $ob;


結(jié)果:

Php output buffering緩存及程序緩存深入解析


代碼5:

復(fù)制代碼 代碼如下:


ob_start();
echo "php";
ob_end_clean();//清空緩存內(nèi)容并關(guān)閉緩存區(qū),ob_get_contents取不到內(nèi)容
header("content-type:text/html;charset='utf-8'");
echo 'ok';
echo '<hr/>';
$ob=ob_get_contents();
echo $ob;


結(jié)果:


代碼6:

復(fù)制代碼 代碼如下:


ob_start();
echo "php";
ob_end_flush();//把緩存送到程序緩存內(nèi)并關(guān)閉ob緩存
header("content-type:text/html;charset='utf-8'");
echo 'ok';
echo '<hr/>';
$ob=ob_get_contents();
echo $ob;


代碼7:對(duì)比代碼6  與ob_flush()比較

復(fù)制代碼 代碼如下:


ob_start();
echo "php";
ob_flush();//把Ob 緩存送到程序緩存,不關(guān)閉ob緩存
header("content-type:text/html;charset='utf-8'");
echo 'ok';
echo '<hr/>';
$ob=ob_get_contents();
echo $ob;


結(jié)果:

Php output buffering緩存及程序緩存深入解析


Ob_clean()
清空ob緩存內(nèi)容但不關(guān)閉
Ob_get_flush()
沖刷出緩存到程序緩存,關(guān)閉ob緩存
代碼8:

復(fù)制代碼 代碼如下:


Ob_start();
echo 'abc';
header("content-type:text/html;charset='utf-8'");
echo 'hello';
Ob_flush();
echo 'aa';
echo ob_get_contents();
//abchelloaaaa


2.ob_flush(),flush()與程序緩存
代碼9:

復(fù)制代碼 代碼如下:


ob_start();
echo 'a';
flush();//把Ob緩存沖刷到程序緩存再?zèng)_刷到瀏覽器輸出,不影響ob緩存
echo ob_get_contents();
//aa


代碼10:

復(fù)制代碼 代碼如下:


ob_start();
echo 'a';
ob_flush();//把Ob緩存沖刷到程序緩存,ob里沒有了緩存內(nèi)容
echo "<br/>ob_con".ob_get_contents();
//a     是按正常輸出的,Ob里沒內(nèi)容


程序緩存:
代碼11:

復(fù)制代碼 代碼如下:


echo str_repeat(" ",1024);//一些版本的 Microsoft Internet Explorer 只有當(dāng)接受到的256個(gè)字節(jié)以后才開始顯示該頁面,所以必須發(fā)送一些額外的空格來讓這些瀏覽器顯示頁面內(nèi)容。
for($i=0;$i<5;$i++){
echo $i;
echo "<br/>";
sleep(1);
flush();
}


會(huì)一秒輸出一個(gè)數(shù)字
如果沒有flush();會(huì)把所有的輸出先暫存在程序緩存里,等完畢在整體返回給瀏覽器 這個(gè)例子說明了程序緩存

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 阜城县| 北安市| 白玉县| 甘谷县| 嘉荫县| 专栏| 寿阳县| 维西| 泰宁县| 墨竹工卡县| 泰州市| 龙海市| 永新县| 宜城市| 乌海市| 鄂尔多斯市| 新化县| 江西省| 宽城| 彭山县| 得荣县| 库伦旗| 天台县| 黄龙县| 方山县| 怀安县| 习水县| 双桥区| 竹山县| 大关县| 阿克陶县| 闽侯县| 昌乐县| 鸡西市| 乌兰察布市| 婺源县| 博兴县| 镇雄县| 丹巴县| 五家渠市| 化德县|