php.ini中有两个关键参数会影响到php的缓存输出控制:

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

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

ob_start— 打开输出控制缓冲  (PHP 4, PHP 5, PHP 7)

当输出缓冲激活后,脚本将不会输出内容(除http标头外),相反需要输出的内容被存储在内部缓冲区中。

ob_get_status — 得到所有输出缓冲区的状态 (PHP 4 >= 4.2.0, PHP 5, PHP 7)

array ob_get_status ([ bool $full_status = FALSE ] )

返回最顶层输出缓冲区的状态信息;或者如果full_status设为TRUE,返回所有有效的输出缓冲级别。

ob_get_contents — 返回输出缓冲区的内容  (PHP 4, PHP 5, PHP 7)

返回输出缓冲区的内容,或者如果输出缓冲区无效将返回 FALSE 。

ob_get_length — 返回输出缓冲区内容的长度 (PHP 4 >= 4.0.2, PHP 5, PHP 7)

输出缓冲区内容的长度;或者返回FALSE——如果没有起作用的缓冲区。

ob_get_clean — 得到当前缓冲区的内容并删除当前输出缓冲区 (PHP 4 >= 4.3.0, PHP 5, PHP 7)

输出缓冲区的内容,并删除当前输出缓冲区。如果输出缓冲区不是活跃的,即返回 FALSE 。

ob_get_flush — 刷出(送出)缓冲区内容,以字符串形式返回内容,并关闭输出缓冲区。

刷出(送出)缓冲区内容,以字符串形式返回内容,并关闭输出缓冲区。

ob_flush — 冲刷出(送出)输出缓冲区中的内容 (PHP 4 >= 4.2.0, PHP 5, PHP 7)

送出缓冲区的内容(如果里边有内容的话)到程序(PHP)缓冲,在调用ob_flush()之后缓冲区内容将被丢弃。

flush — 刷新输出缓冲 (PHP 4, PHP 5, PHP 7)

刷新PHP程序的缓冲,将当前为止程序的所有输出发送到用户的浏览器。flush() 函数不会对服务器或客户端浏览器的缓存模式产生影响。因此,必须同时使用 ob_flush() 和flush() 函数来刷新输出缓冲。flush() 是刷新WebServer的缓冲区,而且只有apache的缓冲区会生效,使用nginx作为WebServer是不用生效的。

ob_flush 与 flush 区别

第一种解释:

在没有开启缓存时,脚本输出的内容都在服务器端处于等待输出的状态,flush() 可以将等待输出的内容立即发送到客户端。 开启缓存后,脚本输出的内容存入了输出缓存中,这时没有处于等待输出状态的内容,你直接使用flush()不会向客户端发出任何内容。而 ob_flush() 的作用就是将本来存在输出缓存中的内容取出来,设置为等待输出状态,但不会直接发送到客户端,这时你就需要先使用ob_flush()再使用flush(),客户端才能立即获得脚本的输出。

第二种解释:

ob_flush只刷新PHP自身的缓冲区,而flush是刷新apache的缓冲区。所以,正确使用俩者的顺序是:先ob_flush,然后flush。ob_flush是把数据从PHP的缓冲中释放出来,flush是把缓冲内/外的数据全部发送到浏览器。

ob_end_flush — 冲刷出(送出)输出缓冲区内容并关闭缓冲 (PHP 4, PHP 5, PHP 7)

送出最顶层缓冲区的内容(如果里边有内容的话),并关闭缓冲区。在调用ob_end_flush()后缓冲区内容被丢弃。ob_start() 和 ob_end_flush() 是一对很好的搭档,可以实现对输出的控制。

相关 ob_end_flush 函数详解

ob_end_clean — 清空(擦除)缓冲区并关闭输出缓冲 (PHP 4, PHP 5, PHP 7)

丢弃最顶层输出缓冲区的内容并关闭这个缓冲区。调用ob_end_clean()时缓冲区内容将被丢弃。

ob_clean — 清空(擦掉)输出缓冲区  (PHP 4 >= 4.2.0, PHP 5, PHP 7)

清空输出缓冲区中的内容

ob_implicit_flush — 打开/关闭绝对刷送 (PHP 4, PHP 5, PHP 7)

ob_implicit_flush ([ int $flag = true ] )  设为TRUE 打开绝对刷送,反之是 FALSE 。

将打开或关闭绝对(隐式)刷送。绝对(隐式)刷送将导致在每次输出调用后有一次刷送操作,以便不再需要对 flush() 的显式调用。

相关函数

  • ob_get_level — 返回输出缓冲机制的嵌套级别
  • ob_gzhandler — 在ob_start中使用的用来压缩输出缓冲区中内容的回调函数。ob_start callback function to gzip output buffer
  • ob_list_handlers — 列出所有使用中的输出处理程序。
  • output_add_rewrite_var — 添加URL重写器的值(Add URL rewriter values)
  • output_reset_rewrite_vars — 重设URL重写器的值(Reset URL rewriter values)

php 缓冲函数的更多相关文章

  1. PHP 页面缓冲函数

    1.flush:刷新缓冲区的内容,输出.函数格式:flush()说明:这个函数经常使用,效率很高.2.ob_start :打开输出缓冲区函数格式:void ob_start(void)说明:当缓冲区激 ...

  2. PHP header() 函数详细说明(301、404等错误设置)

    原文来自:http://www.veryhuo.com/a/view/41466.html 如果您刚刚开始学习PHP,可能有许多函数需要研究,今天我们就来学习一下PHP Header()的使用方法,更 ...

  3. CoreAnimation5-图层时间和缓冲

    图层时间 动画的发生是需要持续一段时间的,所以计时对整个概念来说至关重要.在这一章中,我们来看看CAMediaTiming,看看Core Animation是如何跟踪时间的. CAMediaTimin ...

  4. 常用的opengl函数(三)

    glBlendFunc 定义像素算法.   void WINAPI glBlendFunc(GLenum sfactor,GLenum dfactor); 参数编辑 sfactor 指定红绿蓝和 al ...

  5. [iOS Animation]-CALayer 缓冲

    缓冲 生活和艺术一样,最美的永远是曲线. -- 爱德华布尔沃 - 利顿 在第九章“图层时间”中,我们讨论了动画时间和CAMediaTiming协议.现在我们来看一下另一个和时间相关的机制--所谓的缓冲 ...

  6. loadsh常用函数

    此篇文章会记录常用的lodash函数 防抖函数:_.debounce() 创建一个去缓冲函数,该函数将自上次调用函数以来经过设置的等待毫秒后调用func. 去缓冲函数带有一个取消方法来取消延迟的fun ...

  7. linux中fflush函数和printf函数 【转】

    本文转载自:http://blog.chinaunix.net/uid-30058258-id-5029847.html printf是一个行缓冲函数printf函数是标准函数,最终会调用到系统调用函 ...

  8. fflush()函数总结

    1. 概述 函数名: fflush() 功 能: 清除读写缓冲区,需要立即把输出缓冲区的数据进行物理写入时 头文件: stdio.h 原型: int fflush(FILE *stream),其中st ...

  9. printf函数与缓冲区

    printf函数与缓冲区 printf函数是一个行缓冲函数,先将内容写到缓冲区,满足一定条件后,才会将内容写入对应的文件或流中. 基本条件如下: .缓冲区填满 .写入的字符中有‘\n’ '\r' .调 ...

随机推荐

  1. python小程序:备份文件

    设计程序,有以下步骤: 需要备份的文件和目录由一个列表指定. 备份应该保存在主备份目录中. 文件备份成一个zip文件. zip存档的名称是当前的日期和时间. 解决方案: 版本一: #!/usr/bin ...

  2. 【转】LVS/Nginx如何处理session问题

    原文地址:http://network.51cto.com/art/201005/200279.htm 通过设置persistence的值,使session会话保持. [51CTO.com独家特稿]业 ...

  3. js颜色拾取器

    几年前,很难找到一个合适的颜色选择器.正好看到很多不错的JavaScript颜色选择器插件,故而把这些编译汇总.在本文,Web设计师和开发人员 Kevin Liew 选取了11个相应插件,有些会比较复 ...

  4. ROS naviagtion analysis: move_base

    博客转载自:https://blog.csdn.net/u013158492/article/details/50483123 这是navigation的第一篇文章,主要通过分析ROS代码级实现,了解 ...

  5. 模板模式和Comparable类

    模板模式中,父类规定好了一些算法的流程,并且空出一些步骤(方法)留给子类填充 Java的数组类中静态方法sort()就是一个模板,它空出了一个compareTo的方法,留给子类填充,用来规定什么是大于 ...

  6. 用conda创建一个tensorflow 虚拟环境

    创建your——user——name = tensorflow 的虚拟环境 xinpingdeMacBook-Pro:~ xinpingbao$ conda create -n tensorflow ...

  7. Oracle sql语句执行顺序(转)

    from: http://blog.csdn.net/lailai186/article/details/12612263 sql语法的分析是从右到左 一.sql语句的执行步骤:1)语法分析,分析语句 ...

  8. Linux、Windows中的相对路径和绝对路径

    获取系统的分隔符的方式:System.getProperty("file.separator")   Windows为 \   Linux为/ Windows绝对路径: 以盘符开始 ...

  9. Jmeter接口测试-完成任务API

    完成任务 PUT /api/tasks/:task_id 可以完成id为task_id的task,如果动作成功,该接口返回的task的done字段会变成true. 完成任务的api接口测试很简单,因为 ...

  10. Oracle数据库之单表查询

    接着上一篇的分享,今天主要给大家分享的是关于数据中的单表查询,单表查询很基础,也很重要,但是任何一个初学者必须要掌握的姿势,单表查询就是对单个表进行操作,查询我们想要的数据.单表查询里面的内容也是比较 ...