我有一个生成一些HTML报告的PHP脚本,这需要很长时间才能生成(超过20-30秒)。
现在,文件reports.php通过浏览器回显用户的输出,使用输出缓冲区保存报告。 (编辑:报告文件的名称是由reports.php生成的代码):
<?php
ob_start();
[...echo all the html for the tables in the report...]
file_put_contents('report.html', ob_get_contents());
// end buffering and displaying page
ob_end_flush();
?>
由于我的过程通常需要很长时间,因此我不希望用户长时间看着屏幕等待输出,甚至更糟糕的是,超时。
我做了一些搜索,发现避免这种情况的最佳方法是使用PHP CLI在后台启动此过程。我使用的是单独的文件:
<?php
echo 'Your report is being generated. You'll get it via email.';
exec('nohup php reports.php > /dev/null 2>&1 &');
?>
但是这个解决方案不允许我使用输出缓冲区保存。我猜是因为我正在重定向到/ dev / null?
然后我尝试将该过程启动到后台
<?php
echo 'Your report is being generated. You'll get it via email.';
exec('nohup php reports.php');
?>
但这仍然不会挽救。我究竟做错了什么? 是否有任何选项可以将此报告保存到磁盘而不会让用户等待浏览器窗口打开以回显报告?