在我的Vagrant环境中(尚未在服务器上测试)我在尝试使用我的网站控制器中的exec()
运行PhantomJS时出现错误。
这是我用来调试的代码:
exec('/usr/local/node/node-default/bin/node --version', $output, $code);
var_dump($code);
exec('ls -la /usr/local/node/node-default/bin/phantomjs', $output, $code);
var_dump($code);
exec('/usr/local/node/node-default/bin/phantomjs --version', $output, $code);
var_dump($code);
exec('/usr/local/node/node-default/lib/node_modules/phantomjs/bin/phantomjs --version', $output, $code);
var_dump($code, $output);
及其输出:
int 0
int 0
int 127
int 127
array (size=2)
0 => string 'v0.10.29' (length=8)
1 => string 'lrwxrwxrwx 1 root root 43 Jul 15 18:00 /usr/local/node/node-default/bin/phantomjs -> ../lib/node_modules/phantomjs/bin/phantomjs' (length=128)
我可以从我的终端运行命令,并从PHP的交互式shell(php -a
)运行上面的代码输出所有0返回代码和以下内容用于最终输出:
array(4) {
[0] =>
string(8) "v0.10.29"
[1] =>
string(128) "lrwxrwxrwx 1 root root 43 Jul 15 18:00 /usr/local/node/node-default/bin/phantomjs -> ../lib/node_modules/phantomjs/bin/phantomjs"
[2] =>
string(5) "1.9.7"
[3] =>
string(5) "1.9.7"
}
由于目标可执行文件的权限是777,因此导致php -a
执行PhantomJS的这些环境可能会有所不同,而我的网站的控制器却不能?
答案 0 :(得分:2)
我知道这有点晚了但我只是花了很多时间调查这个确切的问题。对我来说问题是,当通过apache执行时,环境略有不同,因此找不到node
。我必须将/usr/local/bin/node
放入exec
来电,然后才有效。
答案 1 :(得分:1)
我不确定这只是一个权限错误或者是什么,但在与@Athafoud进一步讨论之后我决定不使用npm来安装幻像而只是从他们的网站下载二进制文件。无论出于何种原因,这都可行。