Php output buffering缓存及程序缓存深入解析
时间:2022-01-21 20:36:40|来源:网络精心整理
这篇文章主要讲解的是Php output buffering缓存及程序缓存深入解析,文章内容非常详细,相信一定可以解决你的问题,需要的朋友可以参考下哦
下面测试ob缓存和程序缓存:在测试前为了测试效果更明显,我们在php.ini里先关闭ob缓存并设置明显的错误级别。
Output_buffering=off
Display_errors=on
代码1:
代码如下:
echo "php";
header("content-type:text/html;charset='utf-8'");
echo 'ok';
则会出现
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:
代码如下:
ob_start();
echo "php";
header("content-type:text/html;charset='utf-8'");
echo 'ok';
结果就完全正确了
原因分析:
代码1:Php在echo ‘php'时已经向浏览器发送一个头信息,
当再出现
header("content-type:text/html;charset='utf-8'");
又看到一个头信息,这时已经打回了上面的头信息,无法更该便出错了。
代码2:开启了ob缓存,echo ‘php'时把要打给浏览器的数据先放到ob缓存里,之后又遇到一个头信息,也放入Ob缓存,页面结束时再按http协议到程序缓存后返回给浏览器。
为加深理解再看以下代码
代码3:
代码如下:
ob_start();
echo "php";
header("content-type:text/html;charset='utf-8'");
echo 'ok';
echo '<hr/>';
$ob=ob_get_contents();
echo $ob;
会输出
Ob_get_contents()只是取得ob缓存里的内容而不清楚它们
Ob_get_contents()必须在ob缓存没有清除前使用
代码4:
代码如下:
ob_start();
echo "php";
ob_clean();//清除缓存内容但不关闭缓存区,还能用(往里添加东西)
header("content-type:text/html;charset='utf-8'");
echo 'ok';
echo '<hr/>';
$ob=ob_get_contents();
echo $ob;
结果:
代码5:
代码如下:
ob_start();
echo "php";
ob_end_clean();//清空缓存内容并关闭缓存区,ob_get_contents取不到内容
header("content-type:text/html;charset='utf-8'");
echo 'ok';
echo '<hr/>';
$ob=ob_get_contents();
echo $ob;
结果:
代码6:
代码如下:
ob_start();
echo "php";
ob_end_flush();//把缓存送到程序缓存内并关闭ob缓存
header("content-type:text/html;charset='utf-8'");
echo 'ok';
echo '<hr/>';
$ob=ob_get_contents();
echo $ob;
代码7:对比代码6 与ob_flush()比较
代码如下:
ob_start();
echo "php";
ob_flush();//把Ob 缓存送到程序缓存,不关闭ob缓存
header("content-type:text/html;charset='utf-8'");
echo 'ok';
echo '<hr/>';
$ob=ob_get_contents();
echo $ob;
结果:
Ob_clean()
清空ob缓存内容但不关闭
Ob_get_flush()
冲刷出缓存到程序缓存,关闭ob缓存
代码8:
代码如下:
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:
代码如下:
ob_start();
echo 'a';
flush();//把Ob缓存冲刷到程序缓存再冲刷到浏览器输出,不影响ob缓存
echo ob_get_contents();
//aa
代码10:
代码如下:
ob_start();
echo 'a';
ob_flush();//把Ob缓存冲刷到程序缓存,ob里没有了缓存内容
echo "<br/>ob_con".ob_get_contents();
//a 是按正常输出的,Ob里没内容
程序缓存:
代码11:
代码如下:
echo str_repeat(" ",1024);//一些版本的 Microsoft Internet Explorer 只有当接受到的256个字节以后才开始显示该页面,所以必须发送一些额外的空格来让这些浏览器显示页面内容。
for($i=0;$i<5;$i++){
echo $i;
echo "<br/>";
sleep(1);
flush();
}
会一秒输出一个数字
如果没有flush();会把所有的输出先暂存在程序缓存里,等完毕在整体返回给浏览器 这个例子说明了程序缓存
上一篇:实测在class的function中include的文件中非php的global全局环境
下一篇:PHP 转义使用详解
本文标题:Php output buffering缓存及程序缓存深入解析
本文地址:https://www.tabangni.com/phpstudy/7859.html
查看更多与“PHPoutput buffering程序缓存”有关的文章
- 01-17PHP中基本符号及使用方法
- 01-19PHP count_chars()函数讲解
- 01-21PHP hex2bin()函数用法讲解
- 01-21PHP implode()函数用法讲解
- 01-20PHP lcfirst()函数定义与用法
- 01-20PHP join()函数用法与实例讲解
- 01-19PHP中quotemeta()函数的用法讲解
- 01-18PHP中number_format()函数的用法讲解
- 01-18PHP中str_split()函数的用法讲解
- 01-21一个正则的写法 php
- 01-21php 正则表达式学习笔记
- 01-17php下常用表单验证的正则表达式
- 01-20PHP 正则表达式分析RSS
- 01-21PHP 正则表达式验证中文的问题
- 01-18php中utf-8编码下用正则表达式如何匹配汉字
- 01-21PHP正则匹配图片并给图片加链接详解
- 01-17PHP 正则表达式的几则使用技巧
- 01-18PHP 正则表达式常用函数使用小结
- 01-18php 正则 不包含某字符串的正则表达式
- 01-18PHP 正则 email语句详解
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
推荐阅读
最近更新
- 01-21Php output buffering缓存及程序缓存深入解析
- 01-21ASP.NET 广告控件AdRotator的使用方法与实例
- 01-21php7安装yar扩展的方法详解
- 01-21技术员指导HTML标记语言——表单
- 01-21权威技术员演示css实现图片横向排列滚动效果
- 01-21中级技术员普及CSS上下文选择符实现基于位置为HTML元素添加样式
- 01-21老司机研习CSS自定义select下拉选择框不用其他标签模拟且兼容多数浏览器
- 01-21PHP版 汉字转码的实现详解
- 01-21主编讲诉CSS中使用clearfix清除浮动的方法
- 01-21使用array mutisort 实现按某字段对数据排序