lukaswhite/ screenshotter
使用PhantomJS获取网站截图的PHP包
Requires
- twig/twig: 1.22.3
Requires (Dev)
- phpunit/phpunit: ~4.0
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