我尝试使用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。
希望它有所帮助。
答案 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
。