【问题标题】:How to correctly show output at every echo on all browsers?如何在所有浏览器的每次回显时正确显示输出?
【发布时间】:2011-07-16 13:08:39
【问题描述】:

我将文件移动到新服务器,并且我有一个脚本可以立即将每个echo 的输出显示到浏览器,但这不适用于新服务器。这是我的测试代码:

@ini_set('output_buffering', 0); @ini_set('implicit_flush', 1);

for ($i = 0; $i < ob_get_level(); $i++) ob_end_flush();

ob_implicit_flush(1);

ignore_user_abort(true); set_time_limit(0);


$max_wait_time = 30;

$begin_time = microtime(true);

$elapsed_time = 0;


while(!connection_aborted()) {

    echo $i++.str_repeat(' ', 1020).'<br/>';

    flush(); ob_flush();

    usleep(1000000);

    if($elapsed_time > $max_wait_time){ break; }

    $elapsed_time++;

}

我已经尝试了一些已经成为上述内容的东西。但是打开输出缓冲和刷新对我不起作用。我在 Chrome 和 Firefox 上对此进行了测试,它们都只是在最后输出所有内容。

有什么想法吗?

【问题讨论】:

    标签: php browser output-buffering


    【解决方案1】:

    摘自flush documentation

    flush() 可能无法覆盖 您网站的缓冲方案 服务器,它对任何服务器都没有影响 浏览器中的客户端缓冲。 [...]

    多台服务器,尤其是在 Win32 上, 仍会缓冲您的输出 脚本直到它终止之前 将结果传送给 浏览器。

    Apache 的服务器模块,例如 mod_gzip 可以自己做缓冲 这将导致 flush() 不结果 在数据被立即发送到 客户。

    您更改为不同的 Web 服务器(或 Web 服务器配置)的可能性很高,它会在输出之前缓冲整个脚本的输出。

    【讨论】:

    • 这是您可能得到的最佳答案。不幸的是,正如flush() 文档所说,你不能保证[从 PHP 中] 没有其他东西缓冲数据。如果可能的话,使用 Apache 设置可能会有所帮助,但否则我建议您寻求替代解决方案。
    【解决方案2】:

    您要查找的设置在您的 PHP.ini 中,它被称为 output_buffering:

    ; output_buffering
    ;   Default Value: Off
    ;   Development Value: 4096
    ;   Production Value: 4096
    

    手动将其设置为关闭并重新启动您的网络服务器,以使 flush() 在您需要时实际刷新某些内容,而不是在 4kb 数据之后 :)

    请注意,ini_set 并不总是必须为此工作。如果您想要完全控制,请在 php.ini 本身中禁用它,或作为 .htacces php_value 标志

    【讨论】:

      【解决方案3】:

      浏览器自行决定何时输出内容。因此,如果您未达到该阈值,他们只会等到达到该阈值,然后才会向用户显示更多内容。

      【讨论】:

      • 这是真的,但我不认为这对我来说是这样,因为当我将它放在 Media Temple 上时,这在使用不同的主机时效果很好,这开始发生了。所以我认为这不是浏览器问题。
      • 你的意思是服务器,对吧?浏览器何时显示内容取决于浏览器,但它们会在服务器发送的任何内容被发送时吸入。
      • 他们吸收了它,但这并不意味着他们会立即展示它。或者有人告诉我...
      【解决方案4】:

      尝试添加到.htaccess

      php_value output_buffering 关闭

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-10-15
        • 1970-01-01
        • 2014-04-27
        • 1970-01-01
        • 2011-03-25
        • 2013-04-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多