【问题标题】:Running PhantomJS with PHP server side在 PHP 服务器端运行 PhantomJS
【发布时间】: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 的托管托管服务器

标签: php phantomjs exec


【解决方案1】:

尝试使用:

$cmd = 'unset DYLD_LIBRARY_PATH ;';
$cmd.= ' /usr/local/bin/phantomjs'; //where is isntalled phantomjs
$cmd.= ' /var/www/rasterize.js'; //where is your script
exec($cmd.' 2>&1', $output);
print_r($output);

这个脚本在 Ubuntu 12.04 和 php 5.4 上测试过。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-27
    • 2017-07-07
    • 2011-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多