【问题标题】:How to identify permission issues while calling tasks from php with shell_exec?使用 shell_exec 从 php 调用任务时如何识别权限问题?
【发布时间】:2016-03-18 18:24:41
【问题描述】:

我正在尝试使用 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

我正在为我的开发环境使用 vagrant 机器。

我找不到方法来检查 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。

希望对你有帮助。

【问题讨论】:

  • 在执行命令时,您是否直接从您的盒子中获得正常响应?
  • 嗨 Muhammed M,是的,当我从机器内部和命令行执行 gulp 命令时,它工作正常。

标签: php gulp vagrant


【解决方案1】:

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

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

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

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

【讨论】:

  • 嘿T0xicCode,刚刚在上面添加了一些细节。是的,gulp 和 node 安装正确。
  • 有趣的是 gulp 路径,当我在机器内部弄清楚它是 /usr/local/bin/gulp 时,但是当我从 php 中得到的路径不包括该文件夹。
  • 会不会是php的shell_exec路径和vagrant用户的路径不一样?
  • @JeanPaulRuiz 很有可能。您必须使用 gulp/node 可执行文件的完整路径,或者修改服务器级别的路径以包含 /usr/local/bin 目录。
  • 嘿@T0xicCode,这样解决了: putenv('PATH=/usr/local/bin/');谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-09
  • 2020-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多