以下是我期望每秒打印消息的代码示例。是否可以在没有javascript的情况下立即在循环中打印结果?
set_time_limit(0);
foreach($array as $key => $value)
{
echo $value;
sleep(1);
}
我想知道是否有可能在在瞬间循环每一步的输出结果,而不必等待,直到它停止。
以下是我期望每秒打印消息的代码示例。是否可以在没有javascript的情况下立即在循环中打印结果?
set_time_limit(0);
foreach($array as $key => $value)
{
echo $value;
sleep(1);
}
我想知道是否有可能在在瞬间循环每一步的输出结果,而不必等待,直到它停止。
是的。 你可以使用PHP的冲洗机制。
例如:
<?
ob_implicit_flush(true);
foreach($array as $key => $value)
{
echo $value;
sleep(1);
}
?>
,由于Web服务器高速缓存结果是不是真的有可能。当输出缓存填满并发送新的http数据包时,客户端可能会获得新数据,但这样做并不是一种好的做法,因为php脚本也会超时,所以这种方法的结果可能不明确。
编辑:你可以使用php的ob_flush来清除缓存,如ob_flush();
。但是,这仍然会导致脚本可能超时的问题,因此您无法在很长一段时间内继续这样做。
一个更好的解决方案是定期进行AJAX调用或使用WebSocket与服务器保持持久连接,以获取新数据。
编辑2:对于WebSockets,它不是那么简单的张贴在这里。此外,它仅适用于HTTP5,Chrome 8支持它,可能还包括Firefox 4和Safari 5。这里是一个PHP使用Websockets的教程:WebSockets with PHP
你能提供一个例子吗? – Nazariy 2011-03-02 18:32:12
我上面加了一个例子 – Neal 2011-03-02 18:37:44
可能工作。但是这不会浪费很多带宽来填充空间吗? – Dan 2011-03-02 18:39:20