PHP 對網頁截圖生成圖片/快照

方案1  使用CuptCaptphp

  能夠參考 百度文庫的帖子 http://jingyan.baidu.com/article/37bce2be0e31a01003f3a25b.html  上邊附有下載地址html

  命令行測試 C:\Users\kai>D:\CutyCapt\CutyCapt.exe --url=https://www.baidu.com --out=D:\CutyCapt\1.pnglinux

  測試結果: 會有圖片沒法加載的狀況,遇到js錯誤失敗web

  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  使用phantomjsapp

  相比方案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測試

  與於方案一、方案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使用的 自行下載安裝

相關文章
相關標籤/搜索