每次长循环迭代时回显'字符串'(flush()不工作)

Nyx*_*yxx 19 php

我有一个循环,执行时间很长,我希望脚本在循环迭代完成后显示一些东西.

echo "Hello!";

flush();

for($i = 0; $i < 10; $i ++) {
    echo $i;
    //5-10 sec execution time
    flush();
}
Run Code Online (Sandbox Code Playgroud)

在整个脚本完成之前,这不会显示回声.什么地方出了错?

Gre*_*rns 23

来自PHP手册:

flush()可能无法覆盖Web服务器的缓冲方案,并且它对浏览器中的任何客户端缓冲没有影响.它也不会影响PHP的用户空间输出缓冲机制.这意味着如果使用ob输出缓冲区,则必须同时调用ob_flush()和flush()来刷新ob输出缓冲区.

echo "Hello!";
flush();
ob_flush();

for($i = 0; $i < 10; $i ++) {
    echo $i;
    //5-10 sec execution time
    flush();
    ob_flush();
}
Run Code Online (Sandbox Code Playgroud)

- 或者 - 您可以刷新并关闭缓冲

<?php
//Flush (send) the output buffer and turn off output buffering
while (ob_get_level() > 0)
    ob_end_flush();

echo "Hello!";

for($i = 0; $i < 10; $i ++) {
    echo $i . "\r\n";
}

?>
Run Code Online (Sandbox Code Playgroud)


小智 5

确保您首先执行以下操作:

@ini_set('zlib.output_compression', 0); @ini_set('implicit_flush', 1); @ob_end_clean();

然后flush();每次您需要将回显输出到浏览器时。