循环中的回声/打印问题

时间:2010-03-04 19:40:03

标签: php ajax loops echo while-loop

我需要修复此问题。
这只是我的代码的一部分

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

}
?> 

循环中的循环过程实际上要大得多,我只是把重要的东西。

无论如何,你可以看到它应该打印
30发布 (等待30秒)
29发表了 (等待30秒)
28发表了 (等待30秒)

但是它会等到循环结束,然后立即打印出来。有没有解决这个问题?我在想一个ajax方法,但我不知道任何方法。

5 个答案:

答案 0 :(得分:15)

很高兴每个人都解释了原因。

这是因为默认情况下,PHP会在将任何内容“刷新”到浏览器之前处理所有内容。只需打印每一行,它就会将这些信息存储在缓冲区中,这些信息将在PHP完成执行后同时打印出来。

如果您希望PHP在该行之后立即将该内容刷新到浏览器,则需要在每行之后调用flush(),然后在每个文本被调用后一次输出一行文本。< / p>

答案 1 :(得分:4)

打印后致电flush()

答案 2 :(得分:2)

您需要使用flush()

答案 3 :(得分: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();
?>

你不应该经常刷新,因为你强迫php处理消息,这会增加执行时间。

答案 4 :(得分:0)

您可以将\n放入echoprint以刷新缓冲区。