我有一个简单的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()
函数将数据发送到浏览器。