PHP + PhantomJS Rasterize

时间:2014-01-27 21:47:55

标签: php phantomjs lamp shared-hosting rasterize

我在我的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。这是一个问题,因为并非所有页面内容都被加载并作为图像捕获。使用HTTPS包含JSAPI。如果我切换到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上运行时会失败或者有解决方法?

1 个答案:

答案 0 :(得分:0)

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

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