【发布时间】: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