以下是我希望每秒打印消息的代码示例。
set_time_limit(0);
foreach($array as $key => $value)
{
echo $value;
sleep(1);
}
我想知道是否有可能在循环的每一步中立即输出结果,而不会等到它停止。
答案 0 :(得分:2)
是肯定的。 你可以使用php的flush机制来完成它。
例如:
<?
ob_implicit_flush(true);
foreach($array as $key => $value)
{
echo $value;
sleep(1);
}
?>
答案 1 :(得分:1)
由于网络服务器缓存了结果,因此这是不可能的。当输出缓存填满并发送新的http数据包时,客户端可能会获得新数据,但这样做并不好,因为php脚本也会超时,因此这种方法的结果可能不明确。
编辑:你可以使用php ob_flush和ob_flush();
一样清除缓存。但是,这仍然会留下脚本可能超时的问题,因此您无法长时间保持这种状态。
更好的解决方案是定期进行AJAX调用或使用WebSockets保持与服务器的持久连接,以便在出现新数据时获取。
编辑2:对于WebSockets,在这里发布并不是那么简短。此外,它只适用于HTTP5,Chrome 8支持它,也可能支持Firefox 4和Safari 5。以下是使用PHP的Websockets的教程:WebSockets with PHP