【问题标题】:PHP buffered output depending on server setting?PHP缓冲输出取决于服务器设置?
【发布时间】:2011-06-17 12:24:21
【问题描述】:

我正在使用以下代码在数据库维护脚本上生成缓冲输出:

function flush_buffers($string){
    echo $string;
    ob_end_flush();
    ob_flush();
    flush();
    ob_start();

}

虽然这在我的本地 Wamp 服务器上按预期工作,每次调用该函数时都会显示输出,但它不会在在线 Web 服务器上:这里的输出仅在脚本结束后发送。 怎么样?

【问题讨论】:

  • 您的 Web 服务器是否有任何额外的缓冲超出/超出 PHP 的控制?例如,我相信 IIS 通常会这样做。
  • Netcraft 报告:“Apache mod_fcgid/2.3.5 mod_auth_passthrough/2.1 mod_bwlimited/1.4 FrontPage/5.0.2.2635”
  • @dqhendricks,flush() 手册指出可能会发生某些服务器覆盖:-( @Wiseguy,请参阅flush() php 手册的第二条评论(用户“brudinie”)

标签: php buffer flush


【解决方案1】:

确保在 Web 服务器上的 php.ini 文件中关闭输出缓冲。

您也不必每次都手动刷新,您可以使用:

ob_implicit_flush(true);
ob_end_flush();

您还应该记住,这仍然是特定于浏览器的。浏览器将决定是否显示输出。某些浏览器(例如 IE6)在有足够的字符可以输出之前不会输出任何内容。

以下将关闭可能导致不需要的输出缓冲的所有内容。

@apache_setenv('no-gzip', 1);
@ini_set('zlib.output_compression', 0);
@ini_set('implicit_flush', 1);
for ($i = 0; $i < ob_get_level(); $i++) { ob_end_flush(); }
ob_implicit_flush(1);

【讨论】:

  • @Abs,两台服务器上的相同浏览器:一台工作,一台不工作。将要求管理员检查 PHP.ini 文件中的设置。谢谢
  • @Riccardo - 您可以在其中使用 phpinfo() 进行快速 test.php 脚本,然后您可以在浏览器中查找 output_buffering 指令。
  • @Abs,没有设置:output_buffering "no value, no value"
  • @Riccardo 以及为您的 WAMP 服务器设置了什么?顺便说一句,mandor 在 php.net 中有一个很棒的评论。我已经用它更新了我的问题。
  • @Abs,这是正确的。 @Jarrod,以前在生产服务器上工作,后来由于资源使用限制,可能已经关闭了。
猜你喜欢
  • 2011-07-24
  • 1970-01-01
  • 1970-01-01
  • 2012-10-22
  • 1970-01-01
  • 1970-01-01
  • 2020-07-25
  • 2014-12-14
  • 2017-04-06
相关资源
最近更新 更多