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 BeautifulSoup匹配字符串

    作者:鸡仔说链接:https://www.jianshu.com/p/ceb99aed4b2e來源:简书 BeautifulSoup中可以通过name和attrs去定位名称和属性,以找到特定的html ...

  2. Linux xclip命令

    一.简介 xclip命令建立了终端和剪切板之间通道,可以用于以命令的方式将终端输出或文件的内容保存到剪切板中,也可以用于将剪切板的内容输出到终端或文件中. 在 X 系统里面,从一个窗口复制一段文字到另 ...

  3. Django rest_framework----序列化组件

    生成hypermedialink serializer.pclass BookModelSerializers(serializers.ModelSerializer): class Meta: mo ...

  4. hdu 4678 Mine

    HDU 4678 把点开空地时会打开的一大片区域看成一块,题目中说到,在一盘游戏 中,一个格子不可能被翻开两次,说明任意两块空地不会包含相同的格子. 那么就可以看成一个组合游戏. 当空地旁边没连任何数 ...

  5. MVC值提供组件ValueProvider的继承关系

    MVC请求过程中中各组件调用顺序:值提供组件(IValueProvider)->模型绑定组件(IModelBinder)->模型验证组件 值提供组件接口 public interface ...

  6. 通达OA整合教程

      资源下载地址: 通达OA 2015:http://pan.baidu.com/s/1qYMxsZU mysql下载:http://pan.baidu.com/s/1c2oVI5y 整合文件:htt ...

  7. ASP.NET多页面传递数据,附框架源码

    很多时候我们需要把数据传递到多个页面,比如表单提交可以指定提交数据到某个页面,那么关闭某个页面怎么把数据传递到上一个页面或者它的父页面. 在这里我附一段源码用于当前页面关闭指定某个页面刷新. 子页面方 ...

  8. (转)正则表达式—RegEx(RegularExpressio)(三)

    原文地址:http://www.cnblogs.com/feng-c-x/archive/2013/09/05/3302465.html 今日随笔,继续写一点关于正则表达式的 知识.前两天介绍了正则表 ...

  9. easyui datagrid deleteRow(删除行)的BUG

    有时候想临时保存一些数据,等确定好后在批量一次提交,但EasyUI  datagrid 用的时候添加可以正常,如果从中间删除那行号就全乱了.导致删除的时候有可能删除上一行数据. function ad ...

  10. TCP连接状态-如何判断一个TCP连接是否可用

    在使用一个长连接的TCP时,如果TCP服务器端接收到TCP的客户端连接过来后,接着服务器端的TCP节点需要对这个客户端进行数据收发,收发时需要判断这个SOCKET是否可用用,判断方法有多种: 1.li ...