0
<< предыдущая заметкаследующая заметка >>
08 июня 2018
PHP: открыть сайт в виде картинки

Товарищ спросил меня, как ему на PHP получить некий сайт в виде картинки? Я задумался — и правда, как? Только через phantomjs. Как мы помним, phantomjs — эмулятор браузера, который для сайтов делает вид, что это настоящий пользователь браузером зашел, но на самом деле его действия управляются не пользователем, а JS-скриптом. В нашем случае совсем простым:

getscreen.js

<?phpvarW=1280,H=1600,URL='https://ya.ru',SHOTNAME='000del.png';

varsystem=require('system');
for(var
i=1;i<system.args.length;i++) { vara=system.args[i];

if(-1!=a.indexOf('=')) { varl=a.split('='),b=a.substring(l[0].length+1);a=l[0];

if(a=='url') {URL=b; continue; }

if(a=='shotname') {SHOTNAME=b; continue; }

if(a=='width') {W=1*b; continue; }

if(a=='height') {H=1*b; continue; }

}
}

varpage=require('webpage').create();page.settings.userAgent="Mozilla/5.0 (Windows NT 6.1; rv:6.0) Gecko/20100101 Firefox/6.0";page.viewportSize={width:W,height:H};page.onLoadFinished=function(status){page.render(SHOTNAME);phantom.exit(0); };page.open(URL);

Запускаем из консоли:

<?php
phantomjs
--debug=false--disk-cache=false--ssl-protocol=any getscreen.js url="http://ya.ru"width=320 height=200 shotname="shot.jpg"

Получаем shot.jpg:

Если кому-то захочется сделать публичный сервис (мне не хочется), то следует установить phantomjs у себя на хостинге, сложить в папку shot/ файлы getscreen.js и index.php, и вот пример, как работать с phantomjs из PHP:

<?php<?phpif(isset($_GET['url']))$URL=$_GET['url']; else die("url error");
if(!
strstr($URL,'://'))$URL="http://".$URL;$URL=preg_replace("/[\"]+/s",'',$URL);$W=(isset($_GET['width']) &&1*$_GET['width']!=0?1*$_GET['width'] :800);$H=(isset($_GET['height']) &&1*$_GET['height']!=0?1*$_GET['height'] :600);$TYPE=(isset($_GET['type']) &&in_array($_GET['type'],array('jpg','png')) ?$_GET['type'] :'jpg');$file="./shot-".rand(0,999999).time().".".$TYPE;exec('phantomjs --debug=false --disk-cache=false --ssl-protocol=any ./getscreen.js url="'.$URL.'" width='.$W.' height='.$H.' shotname="'.$file.'"',$o);$fp=fopen($file,'rb');header("Content-Type: image/".($TYPE=='jpg'?'jpeg':$TYPE));header("Content-Length: ".filesize($file));fpassthru($fp);delete($file);$t=time()-300;$g=array_merge(glob("./*.jpg"),glob("./*.png")); foreach($gas$l) { if(filemtime($l)<$t)delete($l); }?>

И открывать браузером или wget: http://мойсайт/shot/index.php?url=lleo.me&width=800&height=600&type=jpg

Спасибо за внимание, может кому-то было полезно.

<< предыдущая заметка следующая заметка >>
пожаловаться на эту публикацию администрации портала
архив понравившихся мне ссылок

Комментарии к этой заметке скрываются - они будут видны только вам и мне.

Оставить комментарий