【问题标题】:Display the output while looping in php在 php 中循环时显示输出
【发布时间】:2011-08-29 16:32:27
【问题描述】:

无限循环中是否可以在浏览器上显示字符串?这就是我想要发生的事情:

while(1) {
     echo "should display these lines on browser while in infinite loop.<br>";
}

【问题讨论】:

  • 0_0 为什么要故意进入没有任何断点的无限循环?如果不对此进行测试,我怀疑它只会导致服务器端溢出并死掉,而不会显示任何客户端。
  • 您到底想完成什么? PHP 通常在执行完成之前不会输出到浏览器。您可以尝试在echo之后添加flush();
  • 我真的希望这是一个非常简单的例子。
  • 我想知道这是否可能。我尝试了代码,但是 50 行,显示在循环之后显示。这在无限循环中怎么可能?还是我错过了什么或根本不可能?
  • 为什么会有无限循环?你有条件打破循环吗?

标签: php


【解决方案1】:

注意使用ob_flush(); 确保php 输出,usleep(100000) 有时间查看发生的事情。

while(1) {
     echo "should display these lines on browser while in infinite loop.<br>";
     usleep(100000); // debuging purpose
     ob_flush();
     flush();
}

【讨论】:

    【解决方案2】:

    是的,这是可能的。如果您希望它立即出现,您需要 flush 输出到浏览器:

    while(1) {
         echo "should display these lines on browser while in infinite loop.<br>";
         flush();
    }
    

    很有可能,无论你想要完成什么,这都不是你应该做的。

    PHP 最终会超时,但在它生成一个 大量 HTML 文档之前,您的浏览器将无法显示。

    【讨论】:

    • 请注意,Web 服务器可能会在此基础上进行自己的缓冲,尤其是在对发送到浏览器的数据进行 gzip 压缩时
    • 请注意,就像任何 php 脚本一样,它最终会超时。默认为 30 秒
    【解决方案3】:

    在 echo 语句后添加flush(),它会将输出刷新到浏览器。请注意,浏览器通常不会开始呈现,直到它们达到一定数量的信息(大约 0.5kB)。

    while(1) {
         echo "should display these lines on browser while in infinite loop.<br>";
         flush(); //Flush the output buffer
    }
    

    【讨论】:

      【解决方案4】:

      如果你不想把flush();每次回显代码后:

      在你的 php.ini 中设置:

      implicit_flush = 关闭

      或者如果您无权访问 php.ini:

      @ini_set('implicit_flush',1);

      【讨论】:

        猜你喜欢
        • 2013-03-31
        • 1970-01-01
        • 2014-04-15
        • 1970-01-01
        • 1970-01-01
        • 2014-11-03
        • 1970-01-01
        • 2012-06-12
        • 1970-01-01
        相关资源
        最近更新 更多