【问题标题】:PHP + PhantomJS RasterizePHP + PhantomJS 光栅化
【发布时间】:2014-02-18 23:21:24
【问题描述】:

我在我的 PHP 应用程序中使用 PhantomJS 64 位来动态捕获要通过电子邮件发送给用户的 HTML 页面。

phantomjs rasterize.js "http://..." /path_to_images/image.png

当我在命令行上运行上述命令时,此方法工作正常,但当 PHP 脚本使用 exec 运行命令时,它会失败,没有输出并返回退出代码 11。

如果我将其切换为使用 32 位 phantomJS 二进制文件,则该命令会成功,但无法在页面上加载 google JSAPI,因为出现错误 Reference Error: can't find variable google。这是一个问题,因为并非所有页面内容都被加载并捕获为图像。 JSAPI 使用 HTTPS 包含在内。如果我切换到 HTTP,参考错误消失了,但渲染的图像全黑。

我以运行 php 的同一用户身份测试了该命令。

总结一下:

command> phantomjs_64 rasterize.js "http://..." /path_to_images/image.png

好的

exec('phantomjs_64 rasterize.js "http://..." /path_to_images/image.png');

无输出,退出代码 11

command> phantomjs rasterize.js "http://..." /path_to_images/image.png
exec('phantomjs rasterize.js "http://..." /path_to_images/image.png');

输出不完整

有谁知道为什么默认的 phantomJS rasterize.js 脚本在 PHP 上运行时会失败或有解决方法吗?

【问题讨论】:

  • 我想你可能在这里有关于错误代码的信息:stackoverflow.com/questions/16190926/…
  • @BriceFavre 我看到了这个问题,它解释了代码,但没有告诉我为什么它发生在 PHP exec 而不是命令行中。我需要一种解决方法来让它在不涉及为 sudo 设置无密码访问的 PHP 中工作。

标签: php phantomjs lamp shared-hosting rasterize


【解决方案1】:

更新: Arlo Carreon 的 great article 指出了如何在 HostGator 共享主机上进行这项工作(这是我的问题)。只需在命令末尾添加2>&1 即可重定向输出。 64位版本仍然无法使用,但这修复了32位版本。

事实证明,这只发生在通过 Apache Web 服务器请求 PHP 脚本时。解决方法是为需要接收电子邮件的用户创建一个数据库条目,并设置一个 cron 来执行 PHP 脚本,该脚本为数据库中的每个用户条目调用 PhantomJS。当 cron 设置为以最小间隔运行时,用户会感知到电子邮件已生成并立即发送。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多