深入理解 ob_flush 与 flush 的使用效果

2 篇文章 0 订阅
1 篇文章 0 订阅

    在PHP手册中,ob_flush与flush描述, 都是刷新输出缓冲区,  导致很多人迷惑,或者不细心的人可能从来不会注意到这一点,其实, 两者的操作对象不同, 并且在有些情况下, flush根本不会有任何动作。

    下面来详细的说明一下两者的区别:按功能来说,ob系列的函数是针对于PHP缓冲区的的一些操作,这些可以通过查阅文档了解,在此就不赘述了。

     首先从定义上来看,

          ob_flush() : 这个函数将送出缓冲区的内容(如果里边有内容的话)。如果想进一步处理缓冲区中的内容,必须在ob_flush()之前调用ob_get_contents() ,因为在调用ob_flush()之后缓冲区内容将被丢弃。

          flush() : 刷新PHP程序的缓冲,而不论PHP执行在何种情况下(CGI ,web服务器等等)。该函数将当前为止程序的所有输出发送到用户的浏览器。 

     但是从实际情况上来说,flush() 是刷新WebServer的缓冲区,而且只有apache的缓冲区会生效,使用nginx作为WebServer是不用生效的。

     原因很多:

          首先不能在apache的mod_gpiz或者nginx的gpiz上面工作,如果有必要可以进入php.ini关闭相应设置,但我想应该没有人会舍大博小。

          还有一点就是apache buffer 以及 nginx buffer 也是有区别的,ngnix 是强制开启buffer的,无法关闭。这就造成PHP flush 针对nginx 是无效的。

      那么,下面介绍一种通用的写法,代码如下:

header('X-Accel-Buffering: no');
ob_start();
echo str_repeat('.',1024*4);
echo '<br />';
echo 'Begin ...<br />';
for( $i = 0 ; $i < 10 ; $i++ )
{
    echo $i . '<br />';
    echo ob_get_clean();
    flush();
    sleep(1);
}
echo 'End ...<br />';





  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值