6

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

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

}
?> 

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

无论如何,如您所见,它应该打印
30 张贴
(等待 30 秒)
29 张贴
(等待 30 秒)
28 张贴
(等待 30 秒)

但它会等到循环结束,然后一次打印所有内容。有解决办法吗?我在想一个ajax方法,但我不知道。

4

5 回答 5

16

很好,每个人都解释了原因。

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

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

于 2010-03-04T19:44:28.020 回答
4

flush()打印后调用。

于 2010-03-04T19:41:22.037 回答
2

你需要使用flush ()

于 2010-03-04T19:42:02.897 回答
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 处理消息,这会增加执行时间。

于 2013-01-30T00:36:18.210 回答
0

您可以放入\necho 刷新print缓冲区。

于 2010-03-04T19:43:03.783 回答