lukaswhite/screenshotter

使用PhantomJS获取网站截图的PHP包

dev-master 2016-01-04 14:55 UTC

This package is auto-updated.

Last update: 2024-08-27 23:57:27 UTC


README

#Screenshotter

用于创建网页截图的PHP类。

在幕后,它使用PhantomJS,安装此包时为您安装。 (Linux, OSX和Windows)。

##安装

composer require lukaswhite/screenshotter

确保bin/目录可执行

chmod -R +x vendor/lukaswhite/screenshotter/src/bin

(注意,Composer应该会作为安装命令的后续命令来处理这个问题。)

##使用方法

###1. 创建类的实例

$screenshotter = new \Lukaswhite\Screenshotter\Screenshotter(
  $ouputPath, 
  $cachePath
);

####参数

  • $outputPath是要保存结果的截图目录(不包含文件名)。它应该存在,并且可写。
  • $cachePath是用于缓存的目录,是必需的。同样,它应该存在并且可写。

####示例

$screenshotter = new \Lukaswhite\Screenshotter\Screenshotter(
  '/var/www/example.com/app/storage/screenshots/',
  '/var/tmp/'
);

###2. 拍摄截图

$screenshot = $screenshotter->capture(
  $url, 
  $filename, 
  $options = []
);

####参数

  • $url是要截图的网站/网页的URL。
  • $filename是保存截图的文件名。
  • $options是可选的额外选项数组
    • $width;如果没有提供,则设置为1024px
    • $height;如果没有提供,则设置为768px
    • $clipW;要裁剪的宽度(可选)
    • $clipH;要裁剪的高度(可选)

####返回值

截图的路径。

####关于裁剪的说明

如果您没有设置裁剪宽度和高度,则结果截图将和网页一样高,而不管$height设置如何。在大多数情况下,您可能希望将$clipW$clipH设置为分别等于$width$height

####示例

$screenshot = $screenshotter->capture(
  'http://www.lukaswhite.com',
  'lukaswhitedotcom.png'
);
$screenshot = $screenshotter->capture(
  'http://www.lukaswhite.com',
  'lukaswhitedotcom.png',
  [
    'clipW' => 1024,
    'clipH' => 768
  ]
);
$screenshot = $screenshotter->capture(
  'http://www.lukaswhite.com',
  'lukaswhitedotcom.png',
  [
    'width' => 640,
    'height' => 480,
    'clipW' => 640,
    'clipH' => 480
  ]
);

###额外选项

####等待时间

Phantomjs加载页面,然后等待一定的时间后进行截图。这是为了允许页面完全渲染,图像和字体加载等等。

默认情况下,它等待一秒钟。要将等待时间设置为其他值,请调用以下方法

setWait( $value )

该值应该是毫秒,例如

$screenshotter->setWait( 3000 ); // wait for three seconds

####SSL协议

Phantomjs有时难以连接到HTTPS站点。如果这种情况发生,过程可能看起来已经成功,但截图将是空的。

在许多情况下,这是因为默认情况下Phantomjs使用SSLv3来连接,这通常是不受支持的,或者——由于POODLE攻击——已被禁用。

为了解决这个问题,您可以使用setSSLProtocol()方法明确告诉Phantomjs使用哪种SSL协议;以下值是有效的

  • sslv3
  • sslv2
  • tlsv1
  • any

在大多数情况下,最简单的方法是将它设置为all,即

$screenshotter->setSSLProtocol( 'any' );

####忽略SSL错误

某些SSL错误也可能造成困难;特别是过期的或自签名的证书。您可以使用以下方法告诉Phantomjs忽略SSL错误

$screenshotter->ignoreSSLErrors();
// or
$screenshotter->ignoreSSLErrors( TRUE );

要告诉它不忽略SSL错误——这是默认行为——只需将其设置为FALSE

$screenshotter->ignoreSSLErrors( FALSE );

###异常

如果截图过程失败,它将抛出异常。最可能的是这将是一个

Symfony\Component\Process\Exception\ProcessTimedOutException

这种异常(超时)可能由多种原因引起,而不仅仅是超时;因为PhantomJS是一个外部进程,所以并不总是容易知道是什么失败了,所以请检查您的参数。您还可以增加超时时间

$screenshotter->setTimeout(60); // Set timeout to 60 seconds, instead of the defaut 10