ob,输出缓冲区,是output buffering的简称,而不是output cache。ob用对了,是能对速度有一定的帮助,但是盲目的加上ob函数,只会增加CPU额外的负担

ob的基本原则:如果ob缓存打开,则echo的数据首先放在ob缓存。如果是header信息,直接放在程序缓存。当页面执行到最后,会把ob缓存的数据放到程序缓存,然后依次返回给浏览器。

下面我说说ob的基本作用:
  1)防止在浏览器有输出之后再使用setcookie()、header()或session_start()等发送头文件的函数造成的错误。其实这样的用法少用为好,养成良好的代码习惯。
  2)捕捉对一些不可获取的函数的输出,比如phpinfo()会输出一大堆的HTML,但是我们无法用一个变量例如$info=phpinfo();来捕捉,这时候ob就管用了。
  3)对输出的内容进行处理,例如进行gzip压缩,例如进行简繁转换,例如进行一些字符串替换。
  4)生成静态文件,其实就是捕捉整页的输出,然后存成文件。经常在生成HTML,或者整页缓存中使用。

<?php
ob_start();
echo '随便我输出什么,都不会直接显示,但是会存进内存里';
echo '哪怕我使用函数phpinfo()也不会显示';
phpinf();
$echo = ob_get_contents();
//话说我为什么要这么费事呢 答案来了 比如我要统计返回信息的字符串的长度 放到header里面;
$len = ob_get_length();
header('Content-Length: ''.$len); 

诸如此类的需求我们就可以用ob_系列的函数了.下面是ob的函数列表
ob_start(ob_gzhandler);
要缓存的内容
ob_start();             //打开一个输出缓冲区,所有的输出信息不再直接发送到浏览器,而是保存在输出缓冲区里面。
ob_clean();   //删除内部缓冲区的内容,不关闭缓冲区(不输出)。
ob_end_clean();   //删除内部缓冲区的内容,关闭缓冲区(不输出)。
ob_get_clean();   //返回内部缓冲区的内容,关闭缓冲区。相当于执行 ob_get_contents() and ob_end_clean()
ob_flush();   //发送内部缓冲区的内容到浏览器,删除缓冲区的内容,不关闭缓冲区。
ob_end_flush();   //发送内部缓冲区的内容到浏览器,删除缓冲区的内容,关闭缓冲区。
ob_get_flush();   //返回内部缓冲区的内容,并关闭缓冲区,再释放缓冲区的内容。相当于ob_end_flush()并返回缓冲区内容。
flush(); //将ob_flush释放出来的内容,以及不在PHP缓冲区中的内容,全部输出至浏览器;刷新内部缓冲区的内容,并输出。
ob_get_contents(); //返回缓冲区的内容,不输出。
ob_get_length(); //返回内部缓冲区的长度,如果缓冲区未被激活,该函数返回FALSE。
ob_get_level();   //Return the nesting level of the output buffering mechanism.
ob_get_status();   //Get status of output buffers.
ob_implicit_flush();   //打开或关闭绝对刷新,默认为关闭,打开后ob_implicit_flush(true),所谓绝对刷新,即当有输出语句(e.g: echo)被执行时,便把输出直接发送到浏览器,而不再需要调用flush()或等到脚本结束时才输出。
ob_gzhandler //ob_start回调函数,用gzip压缩缓冲区的内容。
ob_list_handlers //List all output handlers in use
output_add_rewrite_var //Add URL rewriter values
output_reset_rewrite_vars //Reset URL rewriter values

这些函数的行为受php_ini设置的影响:
output_buffering //该值为ON时,将在所有脚本中使用输出控制;若该值为一个数字,则代表缓冲区的最大字节限制,当缓存内容达到该上限时将会自动向浏览器输出当前的缓冲区里的内容。
output_handler   //该选项可将脚本所有的输出,重定向到一个函数。例如,将 output_handler 设置为 mb_output_handler() 时,字符的编码将被修改为指定的编码。设置的任何处理函数,将自动的处理输出缓冲。
implicit_flush   //作用同ob_implicit_flush,默认为Off。

还嫌说的不够 那给你个全的
 php中的ob_start用法详解 https://www.cnblogs.com/w10234/p/5480670.html

最新文章

  1. swift 项目 oc 和 swift 混用,文件相互引用
  2. 神奇的expect
  3. nodeType
  4. encodeURI(encodeURI(name)) ;文件上传
  5. iOS打包及发布
  6. 第七章 探秘Qt的核心机制-信号与槽
  7. matlab 函数说明--waitforbuttonpress
  8. 可恶的0x1A
  9. 【模拟】Codeforces 707A Brain&#39;s Photos
  10. Solr4.8.0源码分析(6)之非排序查询
  11. linux下tar用法
  12. 【转】arm交叉编译器gnueabi、none-eabi、arm-eabi、gnueabihf、gnueabi区别
  13. Android 代码库(自定义一套 Dialog通用提示框 )
  14. 深入理解 JavaScript 事件循环(二)— task and microtask
  15. [微信跳转链接]之WAP跳转微信内指定页面
  16. Java基础学习-常量和变量
  17. WPF 播放声音 百度文字转声音
  18. hbase基础建表语句
  19. mysql中delete from in子查询删除失败
  20. Restful framework【第十一篇】url路由控制

热门文章

  1. 利用递归方法实现链表反转、前N个节点反转以及中间部分节点反转
  2. 最详细不过的CUDA的下载安装使用、环境变量配置,有这一篇就够了
  3. Oracle12C创建视图权限不足
  4. Vue的属性、事件、插槽
  5. 高可用服务之Keepalived邮件通知配置
  6. 企业网站还是要考虑兼容至少IE10
  7. Fiddler的基本界面介绍
  8. @Embedded 和 @Embeddable
  9. vue +signalR 实现服务端到客户端消息发送
  10. 刷题[bestphp&#39;s revenge]