我在使用PHP exec()函数时遇到一些问题。每当我尝试运行的脚本很短时,exec()就可以正常工作。但是如果脚本花费的时间超过一秒钟左右,它就会失败。注意,我尝试过在命令行手动运行长脚本,它工作得很好。如果运行的时间超过一秒钟,PHP解释器似乎正在杀死我的外部脚本。有什么想法或建议吗?这是我的代码:
<?php
$fileName = "foobar.docx";
$argVar = $fileName;
exec("python3 /var/www/html/jan8/alexandrina.py /var/www/html/jan8/$argVar");
echo "$output";
?>
这是我的剧本:
^{pr2}$附加说明:我增加了php.ini
中的max execution time limits,但我不认为这有什么关系,因为“长脚本”只需运行几秒钟。另外,当我提到“短脚本”和“长脚本”时,我实际上指的是同一个脚本。“长脚本”和“短脚本”的区别只是执行的时间,因为它可能会根据我请求脚本处理的文件的大小而有所不同。不管怎样。。。如有任何建议,我们将不胜感激!在
通常,php exec函数应该阻塞,直到您运行的命令完成为止。一、 例如,PHP脚本将停止,等待命令完成,直到继续执行脚本的其余部分。我有一半的想法认为您的服务器正在经历一个max_execution_time超时,但是您已经清楚地指出,即使是几秒钟也太长,甚至这些相当短的脚本也有问题。在
我想到了几个解决办法。最简单的方法是修改python命令,以便a)将任何输出路由到文件或输出流,b)进程在后台运行。根据docs on exec:
我还希望您使用exec函数的两个附加可选参数。在
这可能有帮助,也可能没有帮助。如果没有,我们仍然可以使用posix命令来解决这个问题。在
编辑:根据crispytx,长脚本导致$cmd_return_val为1,这意味着发生了错误。试着改变这一行:
^{pr2}$为了这个
^{3}$让我们知道$cmd_output的输出是什么,它至少应该有新生成的进程的进程id。在
谢谢你给我的所有帮助。我在使用你的建议调试时遇到了一点小麻烦,因为我碰巧用AJAX来调用脚本。但是,我使用您的建议编写了更简单的脚本来尝试调试问题,这是我发现的:
数组([0]=>;回溯(最近一次调用):[1]=>;File“/var/www/html/jan8/亚历山大.py“,第28行,in[2]=>;文件.写入(generateHTML(docxFile))[3]=>;UnicodeEncodeError:'ascii'编解码器无法对25位的字符'\u2026'进行编码:序号不在范围(128))
看来问题与ascii编码有关!尽管较大的文件只是一个docx文件,其文本与较短的docx文件重复了300页。看起来,如果一个docx文件超过1页,就会插入单页docx文件中不存在的ascii字符。我不知道这篇文章是否会帮助任何人,但谁知道呢!在
[已解决]
相关问题 更多 >
编程相关推荐