PHP to exec casperjs/phantomjs script


PHP to exec casperjs/phantomjs script

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

我能找到的唯一堆栈溢出帖子暗示我的路径有问题,也许PHP用户无法访问它需要的东西。

我还尝试了以下方法: sudo ln -s /usr/bin/nodejs /usr/bin/node

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

谢谢

我的猜测是你在某处有一些东西,假设安装了节点。

首先,你是否从命令行运行php?即在bash shell中php test.php。如果是这样,您可以按原样运行以下命令。如果通过 Web 服务器,环境可能会有所不同。我将从制作phpinfo();脚本开始,然后通过shell_exec()命令运行故障排除命令。但是,由于这很痛苦,我会先让它从命令行工作,只有在通过 Web 服务器运行时行为不同时才搞砸。(顺便说一句,如果您从 cron 作业运行,同样,环境可能会略有不同。但是,如果它从命令行工作但不能从cron工作,则只担心这一点。

疑难解答 你好.js

简单的一个。确保您的脚本不会引用任何地方node。还要记住,您不能使用节点模块。因此,请查找require()不应该存在的命令。

排查 bash 外壳问题

运行printenv | grep -i node以查看是否有任何东西。但是当PHP运行shell命令时,其他一些文件也会运行。因此,请检查/etc/profile~/.bash_profile中的内容。还要检查/etc/profile.d//etc/bashrc~/.bashrc。您基本上正在寻找任何提到node的内容。

Phantomjs/casperjs 疑难解答

你是如何安装phantomjs和casperjs的?实际的二进制文件是/usr/local/bin 下的实际二进制文件,还是符号链接,或者它们是 .例如,在我的机器上:

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