【问题标题】:How to Run Phantomjs on Linux Webserver如何在 Linux 网络服务器上运行 Phantomjs
【发布时间】:2017-07-07 18:48:33
【问题描述】:

我正在尝试将 Phantomjs 的可执行文件上传到我的 Web 服务器。目前这个服务器上安装了wordpress,所以调用phantom主要是通过php函数来实现的。服务器运行 Linux x86_64,与我下载的 Phantom 存储库相同。在我的一个 wordpress 模板文件中,我尝试调用 phantom 并尝试运行脚本,但没有回显。我知道 javascript 是正确的,因为它是提供的示例之一。此外,Phantomjs 文件具有足够的运行权限。所以那里没有问题。这是我试图用来让它正常工作的所有代码。

<?php 
/* 
Template Name: Home Template
Description: Page template to show home page content.
*/

//phantom/phantomjs-directory/bin/phantomjs
//phantom/phantomjs-directory/examples/version.js

get_header(); 
?>
<?php 
echo exec('phantom/phantomjs-directory/bin/phantomjs phantom/phantomjs-directory/examples/version.js');
?>

被调用的脚本位于examples/而不是bin/中的一个目录,可以在下面找到:

"use strict";
console.log('using PhantomJS version ' +
phantom.version.major + '.' +
phantom.version.minor + '.' +
phantom.version.patch);
phantom.exit();

没有任何东西被记录或回显。为什么会这样?

【问题讨论】:

    标签: javascript php linux wordpress phantomjs


    【解决方案1】:

    尝试使用回声和反引号。

    echo `/phantom/phantomjs myscript.js`; 
    

    【讨论】:

    • 使用此方法没有回显
    • 当你从 shell 运行它时会发生什么?另外,确保 .js 在pwd
    • 运行bin/phantomjs examples/hello.js 输出完美的结果。但从 php 文件中回显根本没有任何内容。
    【解决方案2】:

    exec的正确方式是

    exec('/phantom/phantomjs myscript.js', $response);
    echo implode("<br>", $response);
    

    无论如何,您应该首先通过 SSH 登录到服务器并尝试手动运行脚本来检查脚本是否有效。 PhantomJS 二进制文件可能与服务器处理器架构不匹配(x64 与 x86)。

    还要注意二进制文件和脚本的路径,最简单的方法是使用绝对路径。

    【讨论】:

    • 我确信我的服务器上的 Phantomjs 版本与服务器处理器架构兼容。在从网站安装 Phantomjs x86_64 之前,我验证了架构是 x86_64。我使用的脚本是他们的例子之一。当我在上面使用您的代码时,唯一回显的部分是“数组”。我主要担心的是在上面显示的脚本中没有消息记录到控制台。这让我相信脚本并没有真正运行,它只是在回应一个默认响应。你的想法?
    • 我的错,$response 确实是数组,所以请参阅更新的答案以了解如何查看它。
    • 脚本通过SSH 完美运行,但是当我根据您上面的建议调整代码时,什么也没有发生。
    • $response 数组是空的吗?试试exec('/phantom/phantomjs myscript.js', $response, $return_var);$return_var 是什么?
    【解决方案3】:

    我在这个问题上犯了几个错误。为我做到这一点的黄金代码只是:

    echo exec('/home/mainshee/public_html/wp-content/themes/twentyseventeen/phantom/phantomjs-directory/bin/phantomjs /home/mainshee/public_html/wp-content/themes/twentyseventeen/phantom/phantomjs-directory/examples/version.js');
    

    我犯的主要错误是路径不准确。您会认为仅包括您所在位置的路径就足够了,但我发现他们想要整条路径。从头到尾。我还确保我尝试执行的每个文件都具有0755 权限。我采取的最后一个预防措施是使用scp 上传phantomjs 文件夹,而不是传统的方法。这样做是为了避免任何损坏(尽管我不确定它最终是否有任何不同)。希望这对其他人有帮助!

    【讨论】:

      最近更新 更多