【发布时间】:2010-11-01 22:22:53
【问题描述】:
默认情况下,在整个页面执行完毕之前它不会打印任何内容。
有没有什么功能可以让它马上冲掉?
但不是通过多次调用ob_end_flush(),这不是我想要的。
希望你们得到我吗?
【问题讨论】:
默认情况下,在整个页面执行完毕之前它不会打印任何内容。
有没有什么功能可以让它马上冲掉?
但不是通过多次调用ob_end_flush(),这不是我想要的。
希望你们得到我吗?
【问题讨论】:
如果输出缓冲打开,那么刷新它是向浏览器输出任何内容的唯一方法。如果要立即输出,则打开输出缓冲。如果这不在您的控制范围内,您可以在脚本的 srart 中调用 ob_end_flush() ,这将关闭输出缓冲。但是没有办法让某些消息通过,而有些则不能(不编写自定义回显/打印函数)
调用 ob_end_flush() 将刷新并关闭最顶部的输出缓冲区。要确保所有输出缓冲区都已关闭并刷新,您可以轻松执行以下操作:
while (@ob_end_flush());
【讨论】:
这取决于您的网络服务器。然而,调用flush 将刷新当前打开的缓冲区的输出,正如链接页面上所说:
flush() 对 Web 服务器或客户端浏览器的缓冲方案没有影响。因此,您需要同时调用 ob_flush() 和 flush() 来刷新输出缓冲区。
一些服务器,尤其是在 Win32 上,仍然会缓冲脚本的输出,直到它在将结果传输到浏览器之前终止。
像 mod_gzip 这样的 Apache 服务器模块可能会自己做缓冲,这会导致 flush() 不会导致数据立即发送到客户端。
【讨论】:
您可以关闭开发/测试服务器上的输出缓冲。更改 php.ini 配置文件中的 output_buffering 变量。
【讨论】:
ob_end_flush() 如果在没有要刷新的缓冲区的情况下在脚本顶部使用它,则会抛出一个通知。如果您打算设置 cookie 或标头,这可能是一个问题。我发现它不会影响我共享服务器(Rackspace Reseller)上的缓冲。
【讨论】: