如何在使用shell_exec从php调用任务时识别权限问题?

时间:2016-03-18 18:24:42

标签: php gulp vagrant

我尝试使用shell_exec函数从php调用gulp。

每当我尝试这样做时,我都会得到一个空响应。

以下是一些有效且不起作用的例子:

//$output = shell_exec("whoami"); // ok
//$output = shell_exec("ls"); // ok
//$output = shell_exec("git --version"); // ok
//$output = shell_exec("id"); // ok

//$output = shell_exec("which php"); // ok
//$output = shell_exec("php --version"); // ok

//$output = shell_exec("which gulp"); // Doesn't work
//$output = shell_exec("gulp --version"); // Doesn't work
//$output = shell_exec("/usr/local/bin/gulp --version"); // Doesn't work

//$output = shell_exec("which node"); // Doesn't work
//$output = shell_exec("node --version"); // Doesn't work
$output = shell_exec("/usr/local/bin/node --version"); // ok

我在开发环境中使用流浪汉机器。

我无法找到一种方法来检查导致gulp无法由php执行的根本原因。

当我使用exec时,我得到一个空响应和以下代码:

//exec("which gulp", $output, $code); // Code 1
//exec("gulp --version", $output, $code); // Code 127
exec("/usr/local/bin/gulp --version", $output, $code); // Code 127

有什么想法吗?

提前致谢。

编辑:

刚刚将2>& 1添加到某些调用中并得到了这个:

$output = shell_exec("which gulp 2>&1"); // Doesn't work
// {"output":"which: no gulp in (\/sbin:\/usr\/sbin:\/bin:\/usr\/bin)\n"}}

$output = shell_exec("gulp --version 2>&1"); // Doesn't work
// {"output":"sh: gulp: command not found\n"}}

$output = shell_exec("/usr/local/bin/gulp --version 2>&1"); // Doesn't work
// {"output":"\/usr\/bin\/env: node: No such file or directory\n"}}

编辑:

解决这个问题:

putenv('PATH=/usr/local/bin/');

在调用shell_exec之前必须手动将gulp路径推送到php。

希望它有所帮助。

1 个答案:

答案 0 :(得分:0)

最有可能发生的是该命令正在写入stderr shell_exec无法捕获。您必须通过在命令末尾添加stdout来将其重定向到2>&1,如下所示:

echo shell_exec("which gulp 2>&1");

另外,你确定gulp和node安装在vagrant vm中吗?

编辑:在对问题进行编辑之后,最佳解决方案是将 / usr / local / bin 目录添加到路径中。您可以尝试putenv(),修改 / etc / profile 或在PATH=$PATH:/usr/local/bin/来电前加shell_exec