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

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

getscreen.js

var W=1280,H=1600,URL='https://ya.ru',SHOTNAME='000del.png';

var system=require('system');
for(var i=1;i<system.args.length;i++) { var a=system.args[i];
        if(-1!=a.indexOf('=')) { var l=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; }
        }
}

var page=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);

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

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
if(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($g as $l) { if(filemtime($l)<$t) delete($l); }
?>

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

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

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

книжный сомелье: сегодняшние книжные анонсики c Everybook

Перейти в магазин  Перейти в магазин  Перейти в магазин   26 октября — День и ночь воя на луну

Лучшие книги о Луне! Наталья Акулова: Однажды Королёва спросили: «Кто может дать гарантию, что Луна твердая?» Планетолог Эрик Асфог: Почему Луна выглядит именно так? Роберт Хайнлайн - знаменитая фантастика о жизни на Луне.

Перейти в магазин   А ещё 26 октября 1880 родился Андрей Белый, русский писатель

Михаил Эпштейн — российско-американский философ, культуролог, литературовед, лингвист, эссеист, лауреат премий Андрея Белого. Эта книга — разностороннее исследование российского постмодерна, его истоков и основных этапов ХХ–ХХI века.