资讯专栏INFORMATION COLUMN

简单记录PHP buffer ob_start ob_flush

vvpvvp / 850人阅读

摘要:如果设置为就是关闭状态。不会销毁输出缓冲区,而像函数会销毁缓冲区。简单说就是不会输出,只会清空中的数据。关于缓冲性能调优之参数设置失效问题

phpbuffer 路线

输出的字符串 => PHP buffer => 等待输出 => web 服务器的缓冲区 => tcp 缓冲区 => 客户端

phpbuffer 配置

output_buffering的默认值是打开状态,可以设置大于0的数值来打开buffer。如果设置为0就是关闭状态。
另外,php buffer的 cli与非cli模式不同,另外buffer的输出影响因素也会根据web容器(这里指apache和nginx)也不同。

以下例子在apahce +php模式下运行,nginx大概相同,只是buffer控制参数大小不同 例子1

这个没什么说的,脚本执行完毕后,合并输出到浏览器。

例子2

这个会等5秒后再输出3312吗,答案是否定的,因为虽然开启了ob_start,也调用了flush相关函数,但是所有内容a3312还是一起输出到浏览器,因为flush之前,buffer的大小还没有被填充满,所以仍然不会输出。buffer默认为4096字节,也就是4KB

例子3

这样结果会是先输出a,然后5秒后输出3312.

例子4

这样结果是一起输出,因为你即使手动开启了ob_start ,并且内容已经超过了缓冲区,但是你并没有显示调用flush函数,而且此时(echo 3312之前),脚本也并没有完成。
所以结论是即使超过默认值(4kb)也不会立即发送到浏览器,只到脚本运行完成,或者显示调用了ob_end_flush方法,才会输出到浏览器。

例子5
";
    sleep(2);
}

这个结果是陆续输出,因为数据已经大于了一个buffer,憋不住了,就必须往外冒了。

php buffer 相关函数意义: 1.ob_start

打开output_buffering,脚本不再直接输出到浏览器,而是暂时写入php buffering区域。
不管此时数据写入多大,直到脚本运行完毕后,才发送。或者脚本结束之前,并且数据已经大于了buffer。可以参考例子四

2.ob_get_contents

获取php buffering中的数据,注意:要在ob_end_clean()前调用,否则只会得到空字符。

3.ob_flush ob_end_flush ob_clean

ob_flush不会销毁输出缓冲区,而像ob_end_flush() 函数会销毁缓冲区。
ob_end_flush只是把php buffer中的数据冲(flush/send)到客户端浏览器,而ob_clean将php bufeer中的数据清空(erase),但不发送给客户端浏览器。简单说就是ob_end_clean 不会输出,只会清空php buffering中的数据。

另外,flush()这个函数在例子中我发现没有什么卵用,可能环境不同。。还有我以上都是在apahce中测试,nginx也会有自己的缓冲配置字段控制。

关于php缓冲
Nginx性能调优之buffer参数设置
nginx buffer php 失效问题

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/21779.html

相关文章

  • PHP中output buffering的原理及应用

    摘要:缓存过程在请求一个的过程中,实际上经过三个缓存程序缓存缓存浏览器缓存开启的两个方法在配置这里去掉号即可在页面中使用通过打开的,则作用于所有的页面。 php缓存过程 在请求一个PHP的过程中,实际上经过三个缓存: 程序缓存 ob缓存 浏览器缓存. 开启ob的两个方法 1.在php.ini 配置 ;output_buffering = 4096 这里去掉;号即可 2 在php页面中使用...

    XUI 评论0 收藏0
  • PHP的输出缓冲区

    摘要:什么是缓冲区简单而言缓冲区的作用就是把输入或者输出的内容先放进内存而不显示或者读取至于为什么要有缓冲区这是一个很广泛的问题如果有兴趣可以在网山找下资料其实缓冲区最本质的作用就是协调高速和相对缓慢的设备磁盘等的运作在执行的时候在什么地方有用到 什么是缓冲区?简单而言,缓冲区的作用就是,把输入或者输出的内容先放进内存,而不显示或者读取.至于为什么要有缓冲区,这是一个很广泛的问题,如果有兴趣...

    cyixlq 评论0 收藏0
  • 【modernPHP专题(10)】理解output buffer

    摘要:磁盘高速缓存操作系统中使用磁盘高速缓存技术来提高磁盘的速度,对高速缓存复制的访问要比原始数据访问更为高效。因此,磁盘高速缓存在逻辑上属于磁盘,物理上则是驻留在内存中的盘块。 1. 磁盘高速缓存(Disk Cache) 操作系统中使用磁盘高速缓存技术来提高磁盘的I/O速度,对高速缓存复制的访问要比原始数据访问更为高效。例如,正在运行的进程的指令既存储在磁盘上,也存储在物理内存上,也被复...

    kelvinlee 评论0 收藏0
  • 浅析PHP的输出缓冲控制

    摘要:默认为是一个回调函数,将脚本的所有输出,用所定义的函数进行处理。在输出缓冲区的回调函数中使用这些函数,会导致未定义的错误。 简介 PHP有输出时,可以用输出控制函数来控制输出 缓冲阶段 ob_start(),将内部缓冲区(buffer)打开。当PHP遇到echo,printf等输出语句时, PHP就会将要输出的数据放入缓冲区(buffer)中,等待输出。而只有当缓冲区满了或者php运行...

    wangjuntytl 评论0 收藏0
  • PHP基础之输出缓冲区基本概念、原理分析

    摘要:返回内部缓冲区的内容,关闭缓冲区。返回缓冲区的长度,如果缓冲区未被激活,则返回。得到所有输出缓冲区的状态。使用输出缓冲,可以将读取的文件读入缓冲区,达到一定大小时传送给用户,再继续读取,实现分片的效果。 一、概念 在PHP运行的过程中,可以将会产生输出的函数或操作结果暂时保存在PHP的缓冲区,只有当缓冲区满了、或者PHP运行完毕、或者在必要时候进行输出,才会将数据输出到浏览器,此缓冲数...

    harryhappy 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<