如何正确显示所有浏览器上每个回显的输出?

Abs*_*Abs 7 php browser output-buffering

我将文件移动到一个新服务器,我有一个脚本,可以立即显示每个echo浏览器的输出,但这不适用于新服务器.这是我的测试代码:

@ini_set('output_buffering', 0); @ini_set('implicit_flush', 1);

for ($i = 0; $i < ob_get_level(); $i++) ob_end_flush();

ob_implicit_flush(1);

ignore_user_abort(true); set_time_limit(0);


$max_wait_time = 30;

$begin_time = microtime(true);

$elapsed_time = 0;


while(!connection_aborted()) {

    echo $i++.str_repeat(' ', 1020).'<br/>';

    flush(); ob_flush();

    usleep(1000000);

    if($elapsed_time > $max_wait_time){ break; }

    $elapsed_time++;

}
Run Code Online (Sandbox Code Playgroud)

我尝试了一些已成为上述内容的东西.但转向输出缓冲和冲洗并不适合我.我在Chrome和Firefox上测试过它们,它们都只是在最后输出所有内容.

有任何想法吗?

Nik*_*kiC 13

摘自flush文档:

flush()可能无法覆盖Web服务器的缓冲方案,并且它对浏览器中的任何客户端缓冲没有影响.[...]

多个服务器,尤其是Win32上的服务器,仍将缓冲脚本的输出,直到它终止,然后再将结果传输到浏览器.

像mod_gzip这样的Apache服务器模块可能会自行缓冲,这会导致flush()不会导致数据立即发送到客户端.

您可以更改为其他Web服务器(或Web服务器配置),这可能会在输出之前缓冲整个脚本的输出.

  • 这是您可能获得的最佳答案.不幸的是,正如``flush()``文档所说,你不能保证[在PHP中]没有其他东西可以缓冲数据.如果可能的话,使用Apache设置可能会有所帮助,但除此之外,我建议寻求替代解决方案. (2认同)