日期:2014-05-17  浏览次数:20458 次

flush()函数无效?不能实时刷新输出,如何解决呢?
本帖最后由 zhoumengkang 于 2013-05-28 13:46:14 编辑
测试代码如下:
<?php
for($i=0;$i<5;$i++){  
echo '<br/>abc___'.$i;
ob_flush();
flush();
sleep(1);
}
ob_end_flush();
?> 

理论上应该是1秒出来一条是吧?但是我测试的结果是5秒之后才一起出来。
网上查了下有这样说的“个别web服务器程序,特别是Win32下的web服务器程序,在发送结果到浏览器之前,仍然会缓存脚本的输出,直到程序结束为止。 ”我这个是64位的windows的本地xampp的集成环境。

------解决方案--------------------
我又回来了,试试
<?php
echo str_pad('',4096);

set_time_limit(50);
for($i=0;$i<=5;$i++){
    echo $i.'<br />';
ob_flush();
flush(); 
sleep(1);
}
?>

这两天出这个问题的还挺多的。
这个写法在各浏览器测试都没问题,但有童鞋说,这种做法往缓存区写垃圾,可以试试PHP抛出异常,有空研究一下再分享