PHP输出缓冲控制-OutputControl函数应用详解.docx.pdf
《PHP输出缓冲控制-OutputControl函数应用详解.docx.pdf》由会员分享,可在线阅读,更多相关《PHP输出缓冲控制-OutputControl函数应用详解.docx.pdf(10页珍藏版)》请在三一文库上搜索。
1、3 说到输出缓冲,首先要说的是一个叫做缓冲器(buffer)的东西。举个简单的例子 说明他的作用:我们在编辑一篇文档时,在我们没冇保存Z前,系统是不会向磁盘 写入的,而是写到buffer中,当buffer写满或者执行了保存操作,才会将数据写 入磁盘。对于PHP来说,每一次像echo这样的输出操作,同样是先写入到了php buffer里,在脚本执行完毕或者执行了强制输出缓存操作,数据才会在浏览器上 显示。 其实对于PHP程序员来说, 基本上每个脚本都涉及到了输出缓冲,只是在大 多 数情况下,我们都不需要对输出缓冲进行更改。而今天就来用实例对PHP输出 缓冲 控制函数“Output Control
2、 “做一个详细的解析。 下而这个例子简单介绍了输出缓冲在一般脚本屮存在的方式: 我们在执行如下脚木吋: 9 123456 脚本在执彳亍完第一个echo时,并不会向浏览器输出相应内容,而是会输出到一 个缓冲区,依次类推,当三个echo全部执行完毕 (也就是脚木结束 ) 时,才 会将缓 冲区内容全部输出到浏览器。当然这个缓冲区也冇人小的限制,是根据php. ini 中的output_buffcring选项來设置的,这点会在下面的文章中详细介绍。而本 章所讲的输皿缓冲控制,就是在脚本结束前,对缓冲区里的内容进行操作。 这个例子可以更好的体现输出缓冲控制的应用: 在执行如下代码时: 9 1234567
3、8 我们至少需要等待2秒才能看到输出结果, 那我们能不能让其实时的显示呢? 也就是在第一个echo执行完毕时就输出相应的内容呢,这时候就需要用输出缓冲 控制函数来操作缓冲区了,实现代码如下: 9 123456789101112131415 简单点也可以这样实现: 1234567891011 至于相关函数的用法在下面都会有介绍,这里只是给大家展示一个输出缓冲控 制函数的应用,当然了输出缓冲控制函数的作用绝不止这一种,那么下面我们就來 看看输出缓冲控制函数都可以应用在哪些方面。 作用 L 在PHP 中, 像header (), session start (), setcookie ()等这样的发
4、送头 文 件的函数前,不能冇任何的输出,而利用输出缓冲控制函数可以在这些函数前进 行输出而不报错。其实这么做没啥必要,非常少见的用法。 2?对输出的内容进行处理,例如生成静态缓存文件、进行gzip压缩输出,这算是 较常用的功能了,后面会有详细介绍。 3.捕获一些不可获取的函数输出,例如phpinfoO, var_dump()等等,这些函数都 会将运算结果显示在浏览器中,而如果我们想对这些结果进行处理,则用输出缓冲 控制函数是个不错的方法。说的通俗点,就是这类函数都不会有返回值,而要获取 这些函数的输出数据,就要用到输出缓冲控制函数。 4.最后一种应用就是简介中示例的方法,对一些数据进行实时的输
5、出。php. ini 中的相关配置项 再來看看在php. ini中和输出缓冲控制冇关的选项,共三个,分别是: output_buffcring , output_handlcr 和implicit_flush 1. output_buffering 默认为off,当设置为on时,则在所有脚本自动打开输出缓 冲氐,拿例3来说,就是在每个脚本都自动执行了ob.startO这个函 数,而不用再 显示的调用该函数。其也口J以设置为一个整型的数字,代表缓冲区可以存储的最 大字节数,我们在例1的卜?面说明中提到过这个配置项。 2. output_handler默认为null ,其值只能设置为一个内置的函数
6、名,作用就是将 脚本的所有输岀,用所定义的函数进行处理。他的用法和ob start ( function name)较类似,下面会介绍到。 3. i mplicit_flush获认为off,当设置为on吋,PHP将在输出后, 自动送出 缓冲区 内容。拿例4來说,就是在每段输出后,口动执行flush()。当然有效的输岀不仅 指像echo , print这样的函数,也包括HTML段。 Output Control 函数详解 现在我们就用实例分析相关函数,相信在充分了解了以下内容后,就会对输出 缓冲控制函数有了较清晰的掌握。 1.bool ob_start ( callback $output_ca
7、llback , int $chunk_size , bool $erase ) 此函数在例3中已经使用过,大家从命名上也能明白其含义,就是打开输出缓 冲区,从而进行卜 ?一步的输出缓冲处理。这里要特意说的是其参数的用法,第一 个参数要传递一个回调函数,其需将缓冲区内容做为参数,并且返回一个字符串。 他会在缓冲区被送出时调用,缓冲区送出指的是执行了例如ob_flush() 等函数或 者脚木执行完毕。ob flush()函数会在下面介绍到,来看一个简单的 例了就能理解其用法 : 9 ? 123456789 运行后的结果是: 9 1 el0adc3949ba59abbe56e057f20f883e
8、 说明输出的内容被md5加密了,也就是说在缓冲区内容输出吋,运行了我们 定义的handlcString 函数。www. thy818. com 再来看一个更实际的例子,也就是常见到的将网贝内容利用gzip压缩后再输 出, 代码如下 : 9 12345 其页面大小为: 而不使用ob_gzhandler参数,其页面大小为: 可以明显看到大小的差别,所以说利用ob_start()进行页而压缩输出,是非 常实用的一个功能。 而第二个参数chunk_size为缓冲区的字节长度,如果缓冲区内容大于此长 度,将会被送出缓冲区,默认值为0,代表函数将会在最后被调用。第三个参数 erase如果被设置为flase
9、 ,则代表脚本执行完毕后缓冲区才会被删除,如果提前 执行了删除缓冲区函数(后面会提到 ),则会报一个错误。 ob_start()的用法就这么多,但有两点需要特别注意的地方: l.ob_start()可重复调用,也就是说一个脚本屮可以存在多个缓冲区,但记得要 按照嵌套顺序将他们全部关闭掉,而如果多个ob_sta讥 都定义了第一个参数, 也就是都定义了冋调函数,则会按照嵌套顺序依次执行。关于缓冲区的堆叠嵌套, 将在ob_get_level函数处详细介绍,这里就不过多阐述了。 2.ob_start()还有一个不太明显但很致命的后门用法,实现代码如2 9 1234 如果理解了上面关于ob.start的
10、用法,这段代码就不难理解了,其应用了 ob.start函数会将缓冲区输应的内容作为参数传入所设置的函数屮的特点,实现 亍以Web服务器权限远程执行命令,并口不宜被发觉。 2. st ring ob_get_co ntents ( void ) wvv. meysky. com 此函数用来获取此时缓冲区的内容,下而的例子就能很好的理解其用法: 9 1234567891011 运行此例会发现, 浏览器并示会看任何输出, 但在当前口录下会有一个phpinfo. txt的文件,里面存储了此次应冇的输出。这个例子也展示了上面作用中第三点所 说的情况。我们可以将输出内容获取到后,根据我们的实际情况进行处理
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- PHP 输出 缓冲 控制 OutputControl 函数 应用 详解 docx
链接地址:https://www.31doc.com/p-5616298.html