我有一个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()
答案 0 :(得分:3)
我能想到的几种方式:
保留一个变量(称为$ 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();
使用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?