【问题标题】:Show results while script is still executing在脚本仍在执行时显示结果
【发布时间】:2011-07-21 21:38:19
【问题描述】:

现在为了查看结果,我必须等到整个代码执行完毕。它挂起直到完成并保持加载。完成后,它会显示我正在寻找的所有信息。在脚本仍在运行时是否有任何显示?所以说如果我在代码顶部的某个地方打印,我希望它显示它何时被调用,而不是在脚本执行完成时显示。

有人知道怎么做吗?

谢谢

【问题讨论】:

  • 你说的是ajax还是php

标签: php


【解决方案1】:

我必须同时输入ob-flushflush,如this example 所示:

for($i=10; $i > 0; $i--)
{
    echo "$i ...";
    flush();
    ob_flush();
    sleep(1);
}

【讨论】:

    【解决方案2】:

    这个对我有用:(source)

    function output($str) {
        echo $str;
        ob_end_flush();
        ob_flush();
        flush();
        ob_start();
    }
    

    【讨论】:

    • 是的,这是 Chrome 浏览器 Mac OS 的有效答案。
    • 谢谢,它在 Chrome 中也适用于我。我还将 ob_implicit_flush(true) 添加到第一行。
    • 优秀的答案,与其他一些答案不同,它在 2021 年有效:-)
    【解决方案3】:

    您可以通过输出缓冲来做到这一点。使用ob_start() 在脚本顶部打开输出缓冲。这使得 PHP 不会向浏览器发送任何输出。相反,它存储在内部。 随时使用ob_flush() 刷新您的输出,内容将发送到浏览器。
    但请记住,输出缓冲受许多其他因素的影响。我认为某些版本的 IIS 会等到脚本完成,而忽略输出缓冲。客户端上的一些防病毒软件(它是 Panda 吗?)可能会等到页面完全加载后再将其传递给浏览器。

    【讨论】:

      【解决方案4】:

      你可以像这样使用output buffering

      ob_start();
      
      echo('doing something...');
      
      // send to browser
      ob_flush();
      
      // ... do long running stuff
      echo('still going...');
      
      ob_flush();
      
      echo('done.');
      ob_end_flush(); 
      

      【讨论】:

      • ob_implicit_flush(true) 之前添加ob_start() 之后它对我有用;
      • 我必须在 php.ini 中添加 ob_implicit_flush(true) 并设置 output_buffering = Off
      • ADD flush(); 在某些网络服务器中,ob_flush() 并不意味着它将缓冲区输出到 apache。 flush
      • 某些浏览器仅在文件大小大于 1KB 时才输出。这对我有帮助:stackoverflow.com/a/4192086/2311074
      • 不得不使用 ob_end_flush() 来获得较小的批次来回显,然后再次启动缓冲区。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-03-29
      • 1970-01-01
      • 2011-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多