【问题标题】:how to make echo print out right away in PHP?如何在 PHP 中立即打印出回声?
【发布时间】:2010-11-01 22:22:53
【问题描述】:

默认情况下,在整个页面执行完毕之前它不会打印任何内容。

有没有什么功能可以让它马上冲掉?

但不是通过多次调用ob_end_flush(),这不是我想要的。

希望你们得到我吗?

【问题讨论】:

    标签: php flush


    【解决方案1】:

    如果输出缓冲打开,那么刷新它是向浏览器输出任何内容的唯一方法。如果要立即输出,则打开输出缓冲。如果这不在您的控制范围内,您可以在脚本的 srart 中调用 ob_end_flush() ,这将关闭输出缓冲。但是没有办法让某些消息通过,而有些则不能(不编写自定义回显/打印函数)

    调用 ob_end_flush() 将刷新并关闭最顶部的输出缓冲区。要确保所有输出缓冲区都已关闭并刷新,您可以轻松执行以下操作:

    while (@ob_end_flush());
    

    【讨论】:

    • 你的意思是调用ob_end_flush()一次,后面的echo/print函数马上就输出了吗?
    • @Shore,是的,这就是我的意思。调用 ob_end_flush() 轮流最顶层的输出缓冲区。
    【解决方案2】:

    这取决于您的网络服务器。然而,调用flush 将刷新当前打开的缓冲区的输出,正如链接页面上所说:

    flush() 对 Web 服务器或客户端浏览器的缓冲方案没有影响。因此,您需要同时调用 ob_flush() 和 flush() 来刷新输出缓冲区。

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

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

    【讨论】:

      【解决方案3】:

      您可以关闭开发/测试服务器上的输出缓冲。更改 php.ini 配置文件中的 output_buffering 变量。

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 2020-11-02
          • 1970-01-01
          • 1970-01-01
          • 2017-02-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-09-13
          • 2012-03-24
          相关资源
          最近更新 更多