7

我试图在 PHP 脚本中执行 shell 命令,但 exec 返回 126 代码,这意味着“调用的命令无法执行”(权限问题或命令不是可执行文件)。但最有趣的是,如果我在 cli 下运行相同的 php 脚本,它运行良好。它出什么问题了?

也许环境有一些问题?因为当我在 Apache 下运行它时,如果我不使用可执行文件的绝对路径,它会返回 127 代码(在 cli 下它运行良好并返回 0,即使我只使用文件名)。文件存储在 /usr/local /bin 文件夹。

更新:

正如评论中所要求的,我展示了我的代码示例,但没有什么特别之处。

这部分在 cli 下工作正常,但在 apache 下不起作用($retval将等于 127):

$output = array();
$retval = 0;
exec( "myexecutablefile /full/path/to/someotherfile.js", $output, $retval );
echo implode( PHP_EOL, $output );

这段代码将返回$retval = 126

$output = array();
$retval = 0;
exec( "/usr/local/bin/myexecutablefile /full/path/to/someotherfile.js", $output, $retval );
echo implode( PHP_EOL, $output );
4

3 回答 3

5

您需要指定可执行文件的完整路径,并确保您的 Apache 用户有权执行它。

Apache 不使用 bash 运行,也不关心您自己的个人路径设置。

于 2012-07-16T20:09:21.857 回答
5

尝试将 chmod 0777 放入可执行文件:

chmod($file,0777);
于 2014-10-01T12:52:18.087 回答
3

显然,PHP exec() 函数调用了 Linux exec() 系统调用。如果您的可执行文件是 bash 脚本,则必须使用 /bin/bash 显式启动它:

exec( "/bin/bash /usr/local/bin/myexecutablefile /full/path/to/someotherfile.js", $output, $retval );

因为您不能在 Linux 上使用 exec() 系统调用来运行 shell 脚本;只有像 bash 这样的 shell 才能解释其中的命令。/bin/bash 是一个可执行文件,可以在 Linux 上使用 exec() 完美启动,然后运行您的脚本。

于 2017-06-28T11:29:21.327 回答