在PHP While循环中输出文本(当页面仍在工作时?)


Output Text in PHP While Loop (while page is still working?)

我有一个简单的php页面,它正在为mysql结果集执行一些操作:

$i = $d = $n = 0;
$sql="SELECT record, field1,field2,field3 from table where condition='xxxx'" ;
result=$db->send_sql($sql);
while($row=mysql_fetch_array($result, MYSQL_ASSOC))
{
  //about 500 results
  //now performing some actions on these results via function call
  $i++;
  if($row['field1'] == 'xxx')
  {
    $d++;
    echo $row['record'].": ";
    echo do_something(field1,field2); //function will echo some text
    echo "<br>";
  }
  else
  {
    $n++;
    echo $row['record'].": nothing to do <br>";
  }
}
echo "<hr>Total: ".$i." - Updates: ".$d." - Nothing done: ".$n;

只有在完成所有操作并完成while语句后,才会显示所有工作,但输出/echos除外。

这可能是一个愚蠢的问题,但有没有一种方法可以"动态"显示"回声/输出",从而让用户获得"正在发生的事情"的体验?

echo会立即向用户发送输出,但该输出可能会被中间的几层阻挡。如果你想要你描述的感觉,可以使用AJAX。否则,您可以尝试以下方法:

  • 关闭输出缓冲
  • 在发送HTML头元素后立即执行flush()
  • 然后周期性地flush(),使用一些str_repeat()来启动/防止超时

另请参阅本次和本次关于性能/最佳实践的对话以及本次关于输出缓冲的对话。

PHP在服务器上运行,并在完成时向客户端显示输出。我认为你需要Javascript来完成这项工作,但我可能错了。

您可以尝试在每次循环执行后使用flush()函数将数据发送到浏览器。