ob缓冲简介(PHP output buffering)

来源:互联网 发布:网上白家乐有软件分析 编辑:程序博客网 时间:2024/05/18 13:23

ob缓冲简介(PHP output buffering)

ob的打开和关闭

可以通过php.ini中配置 output_buffering 参数为 [boolean]/[integer] 该选项设置为 On 时,将在所有的脚本中使用输出控制。如果要限制输出缓冲区的最大值,可将该选项设定为指定的最大字节数(例如 output_buffering=4096,这也是推荐和默认的值)。从PHP 4.3.5 版开始,该选项在 PHP-CLI 下总是为 Off。

ob缓冲原理

关闭ob缓冲的时候的图

关闭ob缓冲时,执行php代码的时候,会把输出的内容放到php**程序缓冲**中,在脚本执行完毕的时候,会全部返回给浏览器.

ob-close

默认情况下,打开ob缓冲的时候的原理

开启ob缓冲的时候,所有的输出都会首先被放到ob缓冲中,但是需要注意由header()和setcookie()发送的文件头信息不会受到ob缓冲的影响,依然保存在程序缓存中.在脚本执行完毕后,ob缓冲中的内容会被放到程序缓存的内容后面(append追加),在返回给浏览器.
ob_open

注意:程序缓存不由PHP程序员控制.

关于OB的常用函数

  • ob_start() 开启一个ob缓冲
  • ob_get_contents() 获取缓存中的数据
  • ob_clean() 清空缓存中的数据
  • ob_flush() 送出缓冲区的内容(如果里边有内容的话)。如果想进一步处理缓冲区中的内容,必须在ob_flush()之前调用ob_get_contents() ,因为在调用ob_flush()之后缓冲区内容将被丢弃。
  • ob_end() 关闭ob缓存
  • ob_end_clean() 清空缓存并关闭ob缓存(ob_flush+ob_end)
  • flush() 刷新PHP程序的缓冲,而不论PHP执行在何种情况下(CGI ,web服务器等等)。该函数将当前为止程序的所有输出发送到用户的浏览器。

从几个案例来加深对ob的理解

案例 : 只使用php代码,完成网页每秒打印一个数字.

方法1(不使用ob缓冲的情况下):

ob1

方法2(开启ob缓冲的情况下): ob2

值得注意的点

ob不影响由 header() 或 setcookie()发送的文件头信息,仅影响象 echo这样的函数和PHP代码块间的数据(包含php文件中的html代码和通过include和require加载的代码)。

header() 必须在任何实际输出之前调用,不管是普通的 HTML 标签,还是文件或 PHP 输出的空行,空格。在ob打开的情况下,header()会首先被加载到程序缓存中,其他的输出都是在脚本执行完毕的时候,才会由ob缓冲追加到程序缓存中,所以保证了header()在这些输出之前.不会产生什么问题.

如果关闭了ob,需要注意这一点.

ob3

原创粉丝点击