PHP Output 扩展详解

 

    自由控制脚本中数据的输出。它非常地有用,特别是对于:当你想
在数据已经输出后,再输出文件头的情况。输出控制函数不对使用 header() setcookie(),  发送的文件头信息产生影响,只对那些类似于 echo()  PHP代码的数据块有作用。(这段话引用于

 

首先介绍两个php.ini配置文件中的配置项:output_bufferingimplicit_flush。

output_bufferingon/off 或者整数。设置为on时,将在所有脚本中使用输出缓存控制,不限制缓存的大小。而设置为整数时,如output_buffering=4096,当缓存数据达到 4096字节时会自动输出刷新缓存。而这个参数的不同正是导致以上代码在不同时候执行结果不同的原因。output_buffering关闭时,脚本所有的输出(echo)都会即时发送到客户端,执行上面代码时就是每秒输出一个数字。而开启output_buffering后,输出内容就会先缓存在服务端,直到脚本结束时才一起发送给客户端。

implicit_flush:on/off。设定ON意味着,当脚本有输出时,自动立即发送到客户端。相当于在echo后自动加flush()。

 

下面再介绍下PHP的缓存机制:

脚本开始执行时,它可以同时发送header(标题)信息和主体信息。Header信息(来自 header() 或 SetCookie()函数)并不会立即发送,相反,它被保存到一个列表中。这样就可以允许你修改标题信息,包括缺省的标题(例如 Content-Type标题)。

但是,一旦脚本发送了任何非标题的输出(例如,使用HTML代码块或 print()调用),那么PHP就必须先发送所有的标题,然后再送出空行,终止 HTTPheader,而在此之后才会继续发送主体数据。从这时开始,任何添加或修改标题信息的试图都是不允许的,并会发送上述的错误消息之一。

虽然这并不会引起多大的问题,有时候只是在发出任何输入之前终止HTTPheader,从而引起脚本逻辑的复杂化而已。Output buffering技术可以解决这些问题。


Output Buffering的工作原理:

启用output buffering时,在脚本发送输出时,PHP并 不发送HTTPheader。相反,它将此输出通过管道(pipe)输入到动态增加的缓存中(只能在PHP4.0中使用,它具有中央化的输出机制)。你仍然可以修改,添加标题行,或者设置cookie,因为标题实际上并没有发送。最简单的情况是,当脚本终止时,PHP将自动发送HTTP header到浏览器,然后再发送输出缓冲中的内容


php
缓存输出控制的相关函数:

ob_start()
:开启缓冲区

说明:相当于将参数output_buffering设置为on;也就是说,如果参数output_buffering的值为On,那么调用ob_start()与不调用的效果是一样的。

 

 

ob_end_flush()发送outputbuffer(输出缓冲)并禁用output buffering机制。

 

ob_end_clean()清除outputbuffer但不发送,并禁用output buffering。

 

ob_get_contents()将当前的outputbuffer返回成一个字符串。允许你处理脚本发出的任何输出。

 

关于flushob_flush函数的区别,引用如下文章,由于丢失原文地址,所以没有写出原文地址。见谅。

这篇文章是我看了很多篇关于这两个函数区别的文章中最浅显易懂的。力荐。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值