使用 php 返回码 77 执行系统命令
Posted
技术标签:
【中文标题】使用 php 返回码 77 执行系统命令【英文标题】:Execute system command with php return code 77 【发布时间】:2020-06-06 09:00:43 【问题描述】:我正在尝试使用 libreoffice 将 word 文档转换为 pdf。该命令在终端中运行良好,但在我使用shell_exec()
或exec()
用php 编写的应用程序的控制器中它不起作用。 exec()
的 return_var 是 77,我认为这意味着:
错误的文件描述符
任何建议都将受到高度赞赏。
【问题讨论】:
退出代码 77 是“权限被拒绝”。不允许您的服务器进程执行所述二进制文件。 那么解决方法是什么? 这太宽泛了。和纯Linux相关。是否应该发布在 ServerFault 上?我不知道您的任何服务器细节能够帮助您抱歉。这里已经有很多帖子为什么单个二进制文件可以在 bash 中工作,但不是通过 PHP 的 exec,答案很简单:不同的环境。 谢谢伙计。这真的很有帮助。 【参考方案1】:我有相同的错误代码,在命令行末尾添加“2>&1”得到了详细的错误:
(进程:24718):dconf-CRITICAL **:10:11:59.019:无法创建目录'/var/www/.cache/dconf':权限被拒绝。 dconf 将无法正常工作。
希望这将帮助某人获得详细的错误并找到解决方案。
示例代码:
exec('/usr/bin/soffice --headless --convert-to pdf ' . BASEPATH . 'test.docx 2>&1', $v_output, $l_return);
var_dump($v_output);
var_dump($l_return);
【讨论】:
【参考方案2】:我添加了这个命令选项来修复它:
-env:UserInstallation=file:///tmp/test
我的代码是:
$command = "$bin -env:UserInstallation=file:///tmp/test --headless --convert-to pdf:writer_pdf_Export --outdir '$pdfTmpDir' '$path' 2>&1";
exec($command, $output, $code);
【讨论】:
以上是关于使用 php 返回码 77 执行系统命令的主要内容,如果未能解决你的问题,请参考以下文章
在windows系统下的cmd下面执行php 命令,返回‘PHP’不是内部或外部命令,也不是可运行的程序。。