Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php while循环中的回显/打印问题_Php_Ajax_Loops_Echo_While Loop - Fatal编程技术网

php while循环中的回显/打印问题

php while循环中的回显/打印问题,php,ajax,loops,echo,while-loop,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秒) 但它会等到循环结束,然后一次打

我需要对此进行修复。
这只是我代码的一部分

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

}
?> 

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

无论如何,正如您所看到的,它应该打印出来
30已发布
(等待30秒)
29已发布
(等待30秒)
28已发布
(等待30秒)


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

打印后调用。

您需要使用()

您可以将
\n
放入
echo
打印
来刷新缓冲区。

很高兴大家都解释了原因

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


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

使用flush()的循环示例如下:


您不应该经常刷新,因为您强制php处理消息,这将增加执行时间

<?php
 ob_start();
 for ($i = 0; $i < 10; $i++)
 {
   echo "<div>" . time() . ": Iteration $i</div>";
   sleep(1);
   ob_flush();
   flush();
 } 
 ob_end_flush();
?>