使用 CentOS 6.3x64。
我正试图wkhtmltopdf
逃离这里) 从 PHP 脚本中执行。我可以wkhtmltopdf-amd64
通过 SSH 直接成功调用。但是当通过 调用 PHP 时exec
,它总是失败并显示退出代码 127。路径是正确的,所以这不是问题。我可以成功使用exec
调用ls
等id
,所以问题似乎特定于调用wkhtmltopdf-amd64
。
我推测这与权限有关,但我不确定要采取什么步骤。我尝试过apache:apache
该程序的其他所有权,它有 755 个权限。
谢谢您的指导!
补充说明:
抱歉上面没有进一步说明——我已确认该问题与程序路径无关。我使用的是完整的绝对路径。我已确认可以从 SSH 行运行完全相同的命令而不会出现问题(无论pwd
)。我还创建了一个 shell 脚本:
#!/bin/sh
echo 'hello, world!'
我可以通过调用此脚本exec
,并且它正常工作。但是,如果我将其修改为
#!/bin/sh
echo 'hello, world!'
/full/path/to/wkhtmltopdf-amd64 'http://www.google.com/' /full/path/to/output.pdf
然后它会失败并返回退出代码 127。
答案1
您的 shell 似乎无法找到二进制文件。请尝试使用其完整路径名(例如,/usr/bin/ls
而不是ls
)来调用它。有关更多信息,请参阅man bash
答案2
我之前也遇到过同样的问题。在我的情况下,未设置执行位时返回 126,设置执行位时返回 127。
后来我发现这与系统中缺少一些共享库有关。即使二进制文件是静态链接的,它似乎也使用了系统中的一些共享库。
我真的不记得哪些库导致了这个问题,但要点如下:https://gist.github.com/nghuuphuoc/8282411我认为是一个很好的起点。