什么是ob?
1.1 ob缓冲介绍
output buffering:输出缓冲
ob缓冲是php向浏览器响应数据时的一块缓冲区域
通过ob缓冲,可以减轻服务器的压力,例如:如果浏览器请求的数据比较大的话,如果一次性返回这么多数据,如果访问的用户多的话,服务器的压力就比较大
于是,php程序就可以先给每个用户一点,就会输出到ob缓冲区域
ob 是 output buffering的缩写;
ob系列函数归纳 输出控制函数(output control函数)
- flush — 刷新输出缓冲
- ob_clean — 清空(擦掉)输出缓冲区
- ob_end_clean — 清空(擦除)缓冲区并关闭输出缓冲
- ob_end_flush —这个函数将送出最顶层缓冲区的内容(如果里边有内容的话),并关闭缓冲区。
- ob_flush — 冲刷出(送出)输出缓冲区中的内容
- ob_get_clean — 得到当前缓冲区的内容并删除当前输出缓。
- ob_get_contents — 返回输出缓冲区的内容
- ob_get_flush — 刷出(送出)缓冲区内容,以字符串形式返回内容,并关闭输出缓冲区。
- ob_get_length — 返回输出缓冲区内容的长度
- ob_get_level — 返回输出缓冲机制的嵌套级别
- ob_get_status — 得到所有输出缓冲区的状态
- ob_gzhandler — 在ob_start中使用的用来压缩输出缓冲区中内容的回调函数。ob_start callback function to gzip output buffer
- ob_implicit_flush — 打开/关闭绝对刷送
- ob_list_handlers — 列出所有使用中的输出处理程序。
- ob_start — 打开输出控制缓冲
- output_add_rewrite_var — 添加URL重写器的值(Add URL rewriter values)
- output_reset_rewrite_vars — 重设URL重写器的值(Reset URL rewriter values)
ob_start
bool ob_start ([ callback $output_callback
[, int $chunk_size
[, bool $erase
]]] )
此函数将打开输出缓冲。当输出缓冲激活后,脚本将不会输出内容(除http标头外),需要输出的内容被存储在内部缓冲区中。
内部缓冲区的内容可以用 ob_get_contents() 函数复制到一个字符串变量中。 想要输出存储在内部缓冲区中的内容,可以使用 ob_end_flush() 函数。另外, 使用 ob_end_clean() 函数会静默丢弃掉缓冲区的内容。
ob_start 打开输出控制缓冲 ob_clean 清空缓存区内容 但是不会销毁缓冲区 ob_end_clean 清空缓冲区内容 销毁缓冲区 并结束ob ob_end_flush 输出缓冲区内容 清空缓冲区 销毁缓冲区 结束ob ob_get_contents 获取缓冲区的内容
1 ob缓冲处理器
当php将缓冲区域的内容刷出到浏览器的时候,自动的调用的函数,就称之为缓冲处理器,通常我们使用ob_gzhandler处理器对输出的内容进行压缩处理
体验一把,在没有使用ob_gzhandler压缩之前的效果:(使用火狐浏览器进行测试)
现在使用ob_gzhandler处理器进行压缩处理
1.2 ob多缓冲
所谓的多缓冲就是可以开启多个ob缓冲
注意:如果开启了多个缓冲,那么我们操作的就是离开启最近的那个缓冲,和其他的缓冲区域没有影响
1.3 结合ob缓冲实现页面静态化
我们先参考一下smarty在display()的时候,做了哪些处理呢?
先assign分配变量到模板
再display的时候,将变量进行替换
在获取模板变量、进行变量替换之前,先开启ob缓冲,后面的处理都会在缓冲里面进行处理