当从exec()调用PHP脚本时,该脚本部分失败
我有一个可以从浏览器执行的父PHP脚本。这将通过exec('/full/path/to/php-f/full/path/to/child_script.php args&>debug.log&')生成一个子进程,然后向浏览器返回响应。子进程使用Plates和mPDF生成一组PDF文件。当从浏览器中通过当从exec()调用PHP脚本时,该脚本部分失败,php,Php,我有一个可以从浏览器执行的父PHP脚本。这将通过exec('/full/path/to/php-f/full/path/to/child_script.php args&>debug.log&')生成一个子进程,然后向浏览器返回响应。子进程使用Plates和mPDF生成一组PDF文件。当从浏览器中通过exec调用时,子脚本通过创建PDF获得大约10%-20%的速度,然后神秘地停止,没有任何输出,除了出于调试目的而输入的echo语句 使用与浏览器使用的命令完全相同的命令从CLI调用时,子脚本可以
exec
调用时,子脚本通过创建PDF获得大约10%-20%的速度,然后神秘地停止,没有任何输出,除了出于调试目的而输入的echo
语句
- 使用与浏览器使用的命令完全相同的命令从CLI调用时,子脚本可以工作
调用可以在我的本地机器和我们的QA服务器上运行,但不能在生产环境中运行exec()
- 安全模式关闭
- 我已
编辑了子脚本及其操作的所有文件/目录chmod 0777
,显示错误
,记录错误
都处于启用状态跟踪错误
error_reporting=E_ALL | E_STRICT
最大执行时间=600
不在exec
禁用功能中
- 在子脚本中调用
set\u time\u limit(0)
问题不在于调用
exec
(或shell\u exec
)本身,因为我可以调用父脚本,然后从CLI通过exec
调用主脚本。只有当我尝试通过web执行时,问题才会出现。一些评论是正确的。在与我的托管公司讨论了这一点之后,他们似乎在120秒的CPU时间后终止了脚本。这就是为什么我没有从PHP收到任何时间限制错误消息,并且实际执行时间不一致
我的解决方案是将其重构为cron作业,其中服务器允许更长的限制。谢谢大家的建议。如果它打印回显语句,您如何知道它已停止?它将停止生成PDF。基本上,它是一个执行250多次的循环,每次迭代生成一个PDF。我会定期获取前30-70次迭代的echo语句,然后什么都不做。就我个人而言,如果我必须在脚本中使用
exec()
,我会确保它不能通过浏览器窗口访问,如果适用的话,将其设为cron作业。@皮特,我也希望这样做,但我的客户希望能够通过浏览器提交。虽然如果我不能让它工作。您是否尝试过使用shell\u exec
而不是exec
?如果您通读这些示例,还需要检查更多的环境变量。