【发布时间】:2014-08-11 00:27:03
【问题描述】:
我在远程服务器上通过npm 安装了PhantomJS 并将其添加到.bashrc:PATH=~/node/bin:$PATH
如果我在 ssh 控制台中运行 phantomjs -v,那么我会得到预期的结果:1.9.7
现在当我尝试在 PHP 脚本中使用它时:
<?
putenv("PATH=~/node/bin:$_ENV[PATH]");
echo shell_exec('echo $PATH');
echo shell_exec('phantomjs -v 2>&1');
我收到此错误(不是sh: phantomjs: command not found):
~/node/bin:/bin:/usr/bin
/usr/bin/env: node: No such file or directory
我可以使用完整路径~/node/lib/node_modules/phantomjs/lib/phantom/bin/phantomjs 来获得正确的响应。
但问题是:为什么 php exec() 和 console 的行为不同?
那是因为一些 sh/bash 吗?也许他们正在使用不同的 ENV?
【问题讨论】:
-
添加
echo $_ENV['HOME']。还有echo shell_exec('whoami')。可能很有启发性。 (~可能不是你想象的那样。) -
$_ENV['HOME']= 未定义索引;whoami是我在 ssh 和 php 共享主机上的用户名;~是 /home/user -
你在你的shell和你的网页都试过了吗?如果不是这样,我正在画一个空白。 (另外,显然是
getenv('HOME'),$_ENV['HOME']确实是“不是”。 -
shell 为
echo $HOME返回/home/user -
php 不返回
getenv('HOME'),添加putenv("HOME=~")后返回sh: phantomjs: command not found
标签: php node.js shell ssh phantomjs