PHP 对网页截图生成图片/快照

方案1  使用CuptCapt

  可以参考 百度文库的帖子 http://jingyan.baidu.com/article/37bce2be0e31a01003f3a25b.html  上边附有下载地址

  命令行测试 C:\Users\kai>D:\CutyCapt\CutyCapt.exe --url=https://www.baidu.com --out=D:\CutyCapt\1.png

  测试结果: 会有图片无法加载的情况,遇到js错误失败

  PHP代码测试

<?php
//-------------------------------------------------------
// PARKSON SOFTWARE
//
// Author: HuiChao.Wang <HuiChao.Wang@inpor.com>
// DateTime: 2016/11/2 11:47
//-------------------------------------------------------

//set_time_limit(0);
header("Content-Type:text/html; charset=utf-8");
//设置抓取网址
$url = "https://www.baidu.com";
$url = "http://epaper.gansudaily.com.cn/gsrb/html/2016-11/02/content_304772.htm";
//设置图片名称(以当前时间戳命名)
$time = time();
//设置图片输出地址
$outdir = 'D:/CutyCapt/' . $time . ".png";
//CutyCapt绝对路径
$path = 'D:/CutyCapt/CutyCapt.exe';
//命令
$cmd = "$path --url=$url --out=$outdir";
//执行命令
exec($cmd);

  测试结果:测试的时候用的是一个页面测试的,过程中网页加载的提示一直在转,说明一直结束不了。但是图片是已经生成好的。

方案2  使用phantomjs

  相比方案1此方案图片未丢失

  下载地址 http://phantomjs.org/download.html

  首先需要写一段js代码

    var page = require('webpage').create(); 
    var args = require('system').args; 
     
    var url = args[1]; 
    var filename = args[2]; 
     
    page.open(url, function () { 
        page.render(filename); 
        phantom.exit(); 
    }); 

 

  命令行测试 C:\Users\kai>D:\phantomjs211\bin\phantomjs.exe D:\phantomjs211\my\test2.js http://www.jb51.net d:/sss.png

  测试结果:如果网页有js错误会导致解析失败

  

 

  PHP代码

<?php
//-------------------------------------------------------
// PARKSON SOFTWARE
//
// Author: HuiChao.Wang <HuiChao.Wang@inpor.com>
// DateTime: 2016/11/2 11:47
//-------------------------------------------------------

set_time_limit(0);
header("Content-Type:text/html; charset=utf-8");

//执行程序路径
$exe_path = "D:/phantomjs211/bin/phantomjs.exe";
//js路径
$js_path = "D:/phantomjs211/my/test2.js";
//网页地址
$url = "http://news.163.com/16/1101/21/C4QM1O9C000189FH.html";
//设置图片名称(以当前时间戳命名)
$image_path = 'D:/' . time() . '.png';

//命令
$cmd = "$exe_path $js_path $url $image_path";
//执行命令
exec($cmd);

  测试结果:如果网页有js错误会导致解析失败

方案3  使用wkhtmltpdf/wkhtmltoimage

  下载地址 http://download.gna.org/wkhtmltopdf/0.12/0.12.3.2/wkhtmltox-0.12.3.2_msvc2013-win64.exe

  命令行测试 C:\Users\kai>D:\wkhtmltopdf\bin\wkhtmltoimage.exe http://news.163.com/16/1101/21/C4QM1O9C000189FH.html D:/jb51.png

  测试结果:如果网页有js错误会有错误提示,不过能正常生成图片

  如果网页有视频会显示一块黑色区域

  PHP测试

  与于方案1、方案2一样,就是执行cmd命令

  方案3在服务器(我用的自己电脑做服务器)安装360的情况下会有下图的提示 ps:云主机未测试

  

  在iis服务器执行exec 可能会出现500错误

  原因1:disabl_functions 禁止了 exec方法

  原因2:应用无权限,设置方法   然后进入IIS --》 应用程序池 --》 找到你对应的程序池 --》 右键属性 --》 标识--》修改 网络服务 为 本地服务

 

方案3也可以生成pdf 使用wkhtmltopdf.exe

 

注意:有些网站访问速度慢或者其他原因导致生成图片时超时,php会报出500的错误,大家可以用异步的方式处理生成图片的代码,比如:fsockopen

      $fp = fsockopen($host, $port, $errno, $errstr, $timeout); 
      $out = "POST ".$path." HTTP/1.1\r\n"; 
      $out .= "host:".$host."\r\n"; 
      $out .= "content-length:".strlen($query)."\r\n"; 
      $out .= "content-type:application/x-www-form-urlencoded\r\n"; 
      $out .= "connection:close\r\n\r\n"; 
      $out .= $query; 
      fputs($fp, $out); 
      fclose($fp); 

 

 

以上软件均有linux 版本,需要咋linux使用的 自行下载安装

  

posted @ 2016-11-02 14:55  码一个大馒头  阅读(1180)  评论(0编辑  收藏  举报