PHP流/输出缓冲不再工作

PHP流/输出缓冲不再工作,php,output-buffering,Php,Output Buffering,我有一个脚本,用于在PHP5.3中处理特定日志文件的缓冲,但在服务器升级到PHP5.5后,它就不再工作了。输出需要是html,所以我希望在每次回显后只刷新输出 这是用于工作的代码的精简测试版本 @apache_setenv('no-gzip', 1); @ini_set('zlib.output_compression', 0); @ini_set('implicit_flush', 1); for ($i = 0; $i < ob_get_level(); $i++) { ob_end_

我有一个脚本,用于在PHP5.3中处理特定日志文件的缓冲,但在服务器升级到PHP5.5后,它就不再工作了。输出需要是html,所以我希望在每次回显后只刷新输出

这是用于工作的代码的精简测试版本

@apache_setenv('no-gzip', 1);
@ini_set('zlib.output_compression', 0);
@ini_set('implicit_flush', 1);
for ($i = 0; $i < ob_get_level(); $i++) { ob_end_flush(); }
ob_implicit_flush(1);

set_time_limit(0);

echo 'Start ...<br />';
for( $i = 0 ; $i < 10 ; $i++ )
{
    echo $i . '<br />';
    flush();
    ob_flush();
    sleep(1);
}
echo 'End<br />';
@apache_setenv('no-gzip',1);
@ini_集('zlib.output_compression',0);
@ini_集(“隐式_刷新”,1);
对于($i=0;$i”;
对于($i=0;$i<10;$i++)
{
回显$i。“
”; 冲洗(); ob_flush(); 睡眠(1); } 回声“结束
”;

我怀疑@ini_set命令并没有凌驾于设置之上,我只是希望有一个简单的例子可以刷新输出缓冲区。网上的大多数例子都是6年前的,没有一个有效。我读到缓冲是在PHP5.4中重新编写的,所以我想知道这是否也是原因。

我已经测试了您的脚本并进行了一些修复/增强

@apache_setenv('no-gzip', 1);
@ini_set('zlib.output_compression', 0);

// you can dismiss this configuration, the bellow explanation is from the php.ini itself
/* Implicit flush tells PHP to tell the output layer to flush itself
   automatically after every output block.  This is equivalent to calling the
   PHP function flush() after each and every call to print() or echo() and each
   and every HTML block.
*/
@ini_set('implicit_flush', 1); 
for ($i = 0; $i < ob_get_level(); $i++) { ob_end_flush(); }
ob_implicit_flush(1);

set_time_limit(0);

echo 'Start ...<br />';
for( $i = 0 ; $i < 10 ; $i++ )
{
    // put the bellow php code if the user browser is Firefox, Internet Explorer or Safari
    // Google Chrome just works fine with it but it do not need
    echo str_repeat(" ", 1024);

    echo $i . '<br />';
    flush();
    // ob_flush(); you have used flush(), why using ob_flush() there is nothing to flush anymore
    sleep(1);
}
echo 'End<br />';
@apache_setenv('no-gzip',1);
@ini_集('zlib.output_compression',0);
//您可以忽略此配置,下面的解释来自php.ini本身
/*隐式刷新告诉PHP让输出层刷新自身
在每个输出块之后自动执行。这相当于调用
每次调用print()或echo()和
和每个HTML块。
*/
@ini_集(“隐式_刷新”,1);
对于($i=0;$i”;
对于($i=0;$i<10;$i++)
{
//如果用户浏览器是Firefox、Internet Explorer或Safari,请输入下面的php代码
//Google Chrome可以很好地使用它,但它不需要
回波重复序列(“,1024);
回显$i。“
”; 冲洗(); //ob_flush();您使用了flush(),为什么使用ob_flush()再也没有什么可冲洗的了 睡眠(1); } 回声“结束
”;
我不认为PHP版本的更新会导致问题,但我不确定

希望这会有所帮助:)

您是否考虑到某些浏览器在发送任何内容之前至少需要查看1024字节的输出?是不是脸红了?嗯,在FireFox或Chrome浏览器中,我仍然无法使用。我在某个地方读到@ini集可能实际上不起作用,所以我可能需要在.htaccess文件中设置它们。感谢您的回复和精彩的评论。:)