在每个长循环迭代(flush()不起作用)时回显“字符串”
2022-08-30 19:09:38
我有一个需要很长时间才能执行的循环,我希望每当循环迭代完成时,脚本都会显示一些东西。
echo "Hello!";
flush();
for($i = 0; $i < 10; $i ++) {
echo $i;
//5-10 sec execution time
flush();
}
在整个脚本完成之前,这不会显示回显。哪里出错了?
我有一个需要很长时间才能执行的循环,我希望每当循环迭代完成时,脚本都会显示一些东西。
echo "Hello!";
flush();
for($i = 0; $i < 10; $i ++) {
echo $i;
//5-10 sec execution time
flush();
}
在整个脚本完成之前,这不会显示回显。哪里出错了?
来自 PHP 手册:
flush() 可能无法覆盖 Web 服务器的缓冲方案,并且它对浏览器中的任何客户端缓冲都没有影响。它也不会影响PHP的用户空间输出缓冲机制。这意味着,如果您使用的是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();
}
- 或者 - 您可以刷新并关闭缓冲
<?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";
}
?>
试试这个
while (@ob_end_flush());
ob_implicit_flush(true);
echo "first line visible to the browser";
echo str_pad("",1024," ");
echo "<br />";
sleep(5);
echo "second line visible to the browser after 5 secs";
请注意,通过这种方式,您实际上是在禁用当前脚本的输出缓冲区。因此,如果您尝试在此之后“ob_end_flush()”,您将收到一条警告,指出没有要关闭的缓冲区。