【问题标题】:Execute system command with php return code 77使用 php 返回码 77 执行系统命令
【发布时间】:2020-06-06 09:00:43
【问题描述】:

我正在尝试使用 libreoffice 将 word 文档转换为 pdf。该命令在终端中运行良好,但在我使用shell_exec()exec() 用php 编写的应用程序的控制器中它不起作用。 exec() 的 return_var 是 77,我认为这意味着:

错误的文件描述符

任何建议都将受到高度赞赏。

【问题讨论】:

  • 退出代码 77 是“权限被拒绝”。不允许您的服务器进程执行所述二进制文件。
  • 那么解决方法是什么?
  • 这太宽泛了。和纯Linux相关。是否应该发布在 ServerFault 上?我不知道您的任何服务器细节能够帮助您抱歉。这里已经有很多帖子为什么单个二进制文件可以在 bash 中工作,但不是通过 PHP 的 exec,答案很简单:不同的环境。
  • 谢谢伙计。这真的很有帮助。

标签: php libreoffice shell-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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-27
      • 2018-09-17
      • 2014-04-16
      • 1970-01-01
      • 2021-09-07
      • 2011-07-10
      • 2019-05-13
      • 1970-01-01
      相关资源
      最近更新 更多