今天,我一直致力于为我的一个项目生成网站截图的解决方案。在深入研究了网上的各种主题后,我得出结论,使用 PhantomJS 可能是我的最佳选择。
由于我运行的是 vagrant (Homestead) 本地服务器,因此我需要将jonnyw/php-phantomjs
( https://packagist.org/packages/jonnyw/php-phantomjs ) 中的包放入现有项目中,并使用基本脚本启动:
$client = Client::getInstance();
$client->debug(true);
$client->setBinDir('/home/admin/domains/domain.com/public_html/bin/');
$request = $client->getMessageFactory()->createCaptureRequest('http://www.domain.com/preview/H/31', 'GET');
$request->setCaptureFile('/home/admin/domains/domain.com/public_html/screens/sample.jpg');
$request->setViewportSize(1366, 768);
$response = $client->getMessageFactory()->createResponse();
$client->send($request, $response);
在代码停止抛出警告之前我花了一点时间,但最终代码正常工作!然后我继续将代码迁移到它应该在的项目中,该项目是用过程 php 代码编写的。我需要这个包,包括自动加载器,它执行的命令与我的 Vagrant 环境中的命令完全相同。
结果有点不同:没有显示标题,也没有显示背景图像。我可能需要补充一点,标题附加了一个自定义字体。
几周前,我为需要 Laravel 的客户端设置了一个服务器,我还需要该服务器上的包并执行相同的代码。起初我得到一些随机的白页,但最终我得到了我期望的截图。我可以忍受截图变成白色的事实,只要它们最终正确出现。
然后我回到这个脚本的目标代码并给它更多的镜头。但结果一直是白色或缺少一些元素(自定义字体标题+背景图像)。我最后一次尝试是更改capture.proc
文件,我在渲染图像之前添加了一个 setTimeout 函数。那确实解决了一个问题:从那以后我没有任何白色图像,但没有解决最重要的问题:缺少标题和背景。
我已经仔细检查了所有 bin 文件,它们都使用 1.9.7 版的 PhantomJS,所以我怀疑那里有问题。但是服务器配置(或 PHP 版本)是否存在差异,会阻止脚本给出正确的结果?
只是为了提供尽可能多的信息,问题服务器位于最低的 PHP 版本上:
- 问题服务器在 PHP 5.5.18 上
- 工作服务器在 PHP 5.5.27 上
- Homestead 服务器在 PHP 5.6.11 上