我在使用PHP执行casperjs脚本时遇到了麻烦:
<?php
putenv("PHANTOMJS_EXECUTABLE=/usr/local/bin/phantomjs");
var_dump(exec("echo \$PATH"));
exec("/usr/local/bin/casperjs hello.js website.com 2>&1",$output);
var_dump($output);
这导致以下输出:
string(43) "/usr/gnu/bin:/usr/local/bin:/bin:/usr/bin:."
array(1) {
[0]=>
string(36) "env: node: No such file or directory"
}
我能找到的唯一stackoverflow帖子暗示我的路径存在问题,也许PHP用户无法访问它所需的内容。
我还尝试了以下内容:sudo ln -s /usr/bin/nodejs /usr/bin/node
是否有人知道我需要做什么或更改此错误才能解决?
由于
答案 0 :(得分:4)
我的猜测是你有某种东西,假设安装了节点。
首先,你是从命令行运行php?即在bash shell中为php test.php
。如果是这样,您可以按原样运行下面的命令。如果通过Web服务器,环境可能不同。我首先制作phpinfo();
script,然后通过shell_exec()
命令运行故障排除命令。但是,由于这是一个痛苦,我首先要从命令行开始工作,如果在通过Web服务器运行时行为不同,那么只会乱用它。 (顺便说一句,如果你是从cron作业运行的话,那么环境可能会略有不同。但是如果它从命令行起作用但是从cron不起作用,那么只会担心这个。)
排查问题hello.js
简单的一个。确保您的脚本在任何地方都没有引用node
。还记得你不能使用节点模块。因此,请查找不应存在的require()
命令。
排查bash shell
运行printenv | grep -i node
以查看是否有任何内容。但是当PHP运行shell命令时,其他一些文件也会运行。因此,请检查/etc/profile
和~/.bash_profile
中的内容。另请检查/etc/profile.d/
,/etc/bashrc
和~/.bashrc
。您基本上都在寻找提及node
的任何内容。
对phantomjs / casperjs进行故障排除
你是如何安装phantomjs和casperjs的?是/ usr / local / bin下的实际二进制文件,还是符号链接,或者是bash脚本。例如。在我的机器上:
cd /usr/local/bin
ls -l casperjs phantomjs
给出:
lrwxrwxrwx 1 darren darren 36 Apr 29 2014 casperjs -> /usr/local/src/casperjs/bin/casperjs
lrwxrwxrwx 1 darren darren 57 Apr 29 2014 phantomjs -> /usr/local/src/phantomjs-1.9.7-linux-x86_64/bin/phantomjs
然后检查每个文件:
head /usr/local/src/casperjs/bin/casperjs
head /usr/local/src/phantomjs-1.9.7-linux-x86_64/bin/phantomjs
第一个告诉我casper实际上是一个python脚本#!/usr/bin/env python
,而第二个用垃圾填充屏幕,告诉我它是一个二进制可执行文件。