是否可以在没有javascript的情况下立即在循环中打印结果?

时间:2011-03-02 18:30:11

标签: php loops sleep echo

以下是我希望每秒打印消息的代码示例。

set_time_limit(0);

foreach($array as $key => $value)
{
    echo $value;

    sleep(1);
}

我想知道是否有可能在循环的每一步中立即输出结果,而不会等到它停止。

2 个答案:

答案 0 :(得分:2)

是肯定的。 你可以使用php的flush机制来完成它。

例如:

   <?
    ob_implicit_flush(true);
    foreach($array as $key => $value)
{
    echo $value;

    sleep(1);
}
    ?>

答案 1 :(得分:1)

由于网络服务器缓存了结果,因此这是不可能的。当输出缓存填满并发送新的http数据包时,客户端可能会获得新数据,但这样做并不好,因为php脚本也会超时,因此这种方法的结果可能不明确。

编辑:你可以使用php ob_flushob_flush();一样清除缓存。但是,这仍然会留下脚本可能超时的问题,因此您无法长时间保持这种状态。

更好的解决方案是定期进行AJAX调用或使用WebSockets保持与服务器的持久连接,以便在出现新数据时获取。

编辑2:对于WebSockets,在这里发布并不是那么简短。此外,它只适用于HTTP5,Chrome 8支持它,也可能支持Firefox 4和Safari 5。以下是使用PHP的Websockets的教程:WebSockets with PHP