Ob_flush不丢弃缓冲区

时间:2011-11-15 12:58:33

标签: php html codeigniter

我有一个PHP脚本需要几分钟才能完成处理。当页面仍在加载时,我希望显示部分PHP输出,因为它可用,ob_start()ob_flush()可以完成。

整个脚本执行完毕后,我想将所有PHP输出从一开始就保存到HTML文件中。这可以使用ob_start()file_put_contents("log.html", ob_get_contents());

来完成

问题:但是,由于我们一直在调用ob_flush(),因此使用file_put_contents()保存的最终文件似乎会分成不同的文件。我怀疑这与调用ob_start()之前file_put_contents()调用清除缓冲区有关,但为什么它不只是在最终ob_flush()和{{1}之间保存输出到文件,但保存几个不同的文件? (我可能错了,单独的部分文件可能是部分执行脚本所致)

换句话说,如何在长脚本执行时显示PHP输出,并仍将所有PHP输出保存到单个HTML文件中?

PHP代码

file_put_contents()

3 个答案:

答案 0 :(得分:3)

我能想到的几种方式:

  1. 保留一个变量(称为$ content),并在每次调用ob_flush()时附加当前缓冲区:

    $content = '';
    ...
    $content .= ob_get_contents();
    ob_flush();
    ...
    $content .= ob_get_contents();
    ob_flush();
    ...
    file_put_contents('log.html', $content . ob_get_contents());
    ob_flush();
    
  2. 使用fopen():

    $fp = fopen('log.html', 'w+');
    ...
    fwrite($fp, ob_get_contents());
    ob_flush();
    ...
    fwrite($fp, ob_get_contents());
    ob_flush();
    ...
    fwrite($fp, ob_get_contents());
    fclose($fp);
    ob_flush();
    

答案 1 :(得分:2)

您还可以使用ob_get_contents(),将其保存到变量中,然后保存到文件和输出流中......

答案 2 :(得分:1)

您可以获取缓冲区内容,并通过调用ob_get_contents将其存储在变量中。

您是否阅读过manual