php ob flush 不管用,php ob_flush() flush() 函数不起作用的原因

for($i = 1; $i <= 300; $i++) print(" ");

// 这一句话非常关键,cache的结构使得它的内容只有达到一定的大小才能从浏览器里,输出针对ie // 换言之,如果cache的内容不达到一定的大小,它是不会在程序执行完毕前输出的。经 过测试,我发现这个大小的底限是256个字符长。这意味着cache以后接收的内容都会源源不断的被发送出去。

for($j = 1; $j <= 5; $j++) {

echo $j . "
";

//ob_flush();

flush(); //这一部会使cache新增的内容被挤出去,显示到浏览器上

sleep(1); //让程序"睡"一秒钟,会让你把效果看得更清楚

}

我估计大家观察到的现象会各有不同,有的人是等待了5秒,一下输出了 5 个数字,有的人是每隔一秒输出一个数字。

这是为什么呀。这段代码也是我从网上找来改的,它的本意是要每隔一秒 echo 出一个数字,然后用ob_flush() flush() 将字符发送到浏览器,但是我这边死活不管用。

在网上找了很多的资料,都没将的很明白的,然后我就翻出了好久没动过的 PHP 手册,认真的看了看,在flush函数的描述里面有这样一段话:

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

flush()函数不会对服务器或客户端浏览器的缓存模式产生影响。因此,必须同时使用 ob_flush() 和flush()函数来刷新输出缓冲。

个别web服务器程序,特别是Win32下的web服务器程序,在发送结果到浏览器之前,仍然会缓存脚本的输出,直到程序结束为止。

有些Apache的模块,比如mod_gzip,可能自己进行输出缓存,这将导致flush()函数产生的结果不会立即被发送到客户端浏览器。  ”

看到这里时,我想起了我现在用的是nginx ,是不是nginx对php的输出做了缓存,导致必须等php执行完才会输出,于是我果断切到了 APACHE 下,果然实现了逐字输出的效果。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值