在 PHP 的 while 循环中出现 echo/print 问题

6

我需要解决这个问题。
以下是我的代码的一部分

<?php
$number = 30;
while($number > 0) {
 $number--;
 sleep(30);
 print "$number . Posted<br>";

}
?> 

循环过程实际上要复杂得多,我只列出了重要的部分。无论如何,正如您所看到的,它应该打印:
30 posted
(等待30秒)
29 Posted
(等待30秒)
28 Posted
(等待30秒)
但是它会等到循环结束,然后一次性打印所有内容。有没有解决方法?我想到了使用ajax方法,但我不知道怎么做。
5个回答

17
很好,每个人都解释了原因。
这是因为PHP默认会在将任何内容发送到浏览器之前处理所有东西。通过只打印每一行,它会将信息存储在缓冲区中,直到PHP执行完毕后才会一次性打印出所有内容。
如果您想让PHP立即将该内容刷新到浏览器,请在每行之后调用flush(),然后它将在每次调用后逐行输出文本。

4

在输出内容后调用flush()函数。


2
您需要使用flush()。

1
一个使用flush()的循环的例子是:
<?php
 ob_start();
 for ($i = 0; $i < 10; $i++)
 {
   echo "<div>" . time() . ": Iteration $i</div>";
   sleep(1);
   ob_flush();
   flush();
 } 
 ob_end_flush();
?>

你不应经常执行flush操作,因为这会强制php处理消息并增加执行时间。

0

你可以在 echo 或者 print 中加入 \n 来刷新缓冲区。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接