在我的 Vagrant 环境中(尚未在服务器上测试),当我尝试从我的网站 Controller 之一使用 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,而我的网站 Controller 却不能?
最佳答案
我知道有点晚了,但我只是花了很多时间来调查这个确切的问题。对我来说,问题是当通过 apache 执行时,环境略有不同,因此找不到 node
。我必须将 /usr/local/bin/node
放入 exec
调用中,然后它就起作用了。
关于php - 使用 exec() 运行 PhantomJS 时返回错误代码 127,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24766165/