2009-06-10 49 views
6

默认情况下,它将不会打印出任何东西,直到整个页面完成执行。如何在PHP中将echo打印出来?

是否有任何功能可以立即刷新?

但不是多次拨打ob_end_flush(),这不是我想要的。

希望你们有我?

回答

8

如果输出缓冲处于打开状态,则刷新它是将任何内容输出到浏览器的唯一方法。如果你想立即输出然后转动输出缓冲。如果这不在你的控制范围内,你可以在脚本的srart处调用ob_end_flush()来关闭输出缓冲。然而,没有办法让某些消息通过,有些则不会(没有写入自定义回显/打印功能)

调用ob_end_flush()将刷新并关闭最上面的输出缓冲区。为了确保所有输出缓冲区已关闭,并刷新你可以很容易地做到这一点:

while (@ob_end_flush()); 
+0

+1你会是正确的 – karim79 2009-06-10 19:19:51

6

这将取决于您的网络服务器。调用flush将刷新输出任何电流缓冲是开放的,但是,因为它说的链接页面上:

flush()函数在您的Web服务器的缓存模式或在客户端浏览器没有任何影响。因此,您需要调用ob_flush()和flush()来刷新输出缓冲区。

几台服务器,尤其是Win32上的服务器,仍然会缓存脚本的输出,直到将结果传输到浏览器之前终止。

像Apache等mod_gzip服务器模块可能会做自己的缓冲,这将导致flush()不会导致数据立即发送到客户端。

0

ob_end_flush()会在没有缓冲区刷新时在脚本顶部使用它时发出通知。如果您打算设置cookie或标题,这可能是一个问题。我发现它不会影响我的共享服务器(Rackspace Reseller)上的缓冲。