PHP来执行casperjs / phantomjs脚本

时间:2015-01-18 22:23:05

标签: php node.js macos phantomjs casperjs

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

是否有人知道我需要做什么或更改此错误才能解决?

由于

1 个答案:

答案 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,而第二个用垃圾填充屏幕,告诉我它是一个二进制可执行文件。