【发布时间】:2015-04-22 14:51:21
【问题描述】:
我正在尝试在 Linux 网络服务器上使用 PHP 运行 PhantomJS。这最终将作为一项 cron 作业运行,但现在我通过一个 PHP 脚本运行它,该脚本通过 FTP 上传到服务器。
PHP 脚本:
$cmd = '/usr/local/bin/phantomjs /home/accountname/public_html/myscript.js';
$result = exec($cmd);
var_dump($result);
(请注意,出于隐私考虑,我已将上面路径中的帐户名更改为“帐户名”,但这在我的真实脚本中是正确的 - 并且是从无数其他 PHP 脚本中复制的,它们都可以完美运行。)
myscript.js 内容:
console.log('Hello, world!');
phantom.exit();
结果输出是:
string(0) ""
我尝试了 PhantomJS 网站上的一些示例,但我从未得到任何输出 - 无论是在屏幕上、控制台中还是创建屏幕截图的示例中,PNG 文件都不会出现在正确的位置 - 即使我是指定确切的路径。
我确实尝试返回 PhantomJS 版本,这返回了正确的版本:
$cmd = '/usr/local/bin/phantomjs --version';
$result = exec($cmd);
var_dump($result);
返回:
string(5) "1.9.2"
我知道“exec”不是在 PHP 中运行的安全方式 - 但我只是想测试 PhantomJS 是否可以开始工作,然后我们将调整所有内容以安全工作。
有什么想法吗?提前致谢。
【问题讨论】:
-
还不完全清楚。您是否直接运行 myscript.js 并输出正确的字符串?你在什么操作系统/平台上?
-
好吧,myscript.js 有一个 PhantomJS 特定的调用“phantom.exit();”但是如果我把它拿出来直接调用JS文件,那么它就可以了。如果我运行包含原始示例中显示的代码的 PHP,并使用 cron 作业运行该脚本,那么它可以正常工作。它只是从导致问题的浏览器中执行它。我通过运行常规 cron 作业并更新 PHP 以引用充当队列的 MySQL 表来将 JS 文件传递给它,并安排何时需要此任务,从而解决了这个问题。它是一个运行 CENTOS 5.11 的托管托管服务器