2009-12-23 2 views
6

Прежде всего, я не уверен, если можно захватить окно браузера с помощью php, то как это сделать?PHP: Как захватить экран окна браузера с помощью php?

Если это возможно, лучше будет, чтобы захватить только содержание веб-сайта за исключением части браузера, такие как, панели инструментов панели меню, статусной и т.д.

Спасибо

+3

http://stackoverflow.com/questions/713938/how-can-i-generate-a-screenshot-of-a- webpage-using-a-server-side-script – vsr

+0

Я специально для php, но вы поделились чем-то крутым спасибо :) – Sarfraz

ответ

9

Существует imagegrabscreen() и imagegrabwindow(), что позволит вам программно создавать скриншоты из браузера, работающего на одном компьютере через COM (только Win). См. Комментарии в руководстве о том, как опустить хром браузера. С включенным DCOM это также будет работать с удаленными машинами Windows, которые были настроены для доступа через DCOM.

На стороне, которая говорит, что PHP не знает о браузере, я бы предложил посмотреть на get_browser() в руководстве по PHP. Это не много, но эй, это не совсем так.

2

PHP ничего не знает о браузере. Фактически, обычно PHP заканчивается, пока браузер не получит данные.

Если это вообще возможно, это должна быть клиентская система, такая как Javascript. Это может пересечь DOM и таким образом захватить модель, которую браузер считает, что она отображается; но я не помню, чтобы увидеть какой-либо инструмент для захвата реальной графики. В любом случае, неясно, что вы могли бы сделать с такой информацией. Браузеры не позволяют Javascript обращаться к локальным файлам. Полагаю, вы могли бы в принципе отправить его обратно на сервер по вызову Ajax.

+0

Ну, он знает строку пользовательского агента браузера. Но ничего не говорит о фактическом компьютере клиента. –

1

По существу не поддерживается архитектурой Интернета, и не без оснований. Сервер, к которому вы подключаетесь, не должен иметь больше информации о вас, чем необходимо для обработки и ответа на ваш запрос. Сервер НЕ МОЖЕТ БЫТЬ в состоянии захватить информацию о том, что вы просматриваете на экране.

Таким образом, вы можете, возможно, создать что-то с использованием технологий на стороне клиента, таких как ActiveX или Flash или Java, которые будут захватывать экран, а затем отправлять его обратно на сервер по запросу AJAX, но вы, вероятно, не должны этого делать. Я не могу себе представить, какое использование у вас было бы для такой вещи, кроме того, возможно, отладка макетов.

0

Вы не можете сделать это с PHP (на стороне сервера).

Но вы можете выложить и использовать один из многих конвертеров HTML в PDF для захвата изображения (и есть много инструментов для преобразования PDF-кода в другое).

6

Это абсолютно возможно, это просто требует немного больше, чем PHP, чтобы это произошло. У меня есть приложение, написанное на PHP, которое делает снимки веб-сайтов через определенные промежутки времени. Это немного сложнее, чтобы получить движение, но вот шаги, которые я взял на машине Linux:

  • Установите Xvfb (или VNC-сервер) для эмуляции сеанса X Windows, в памяти. Начало Xvfb на дисплее: 1
  • Установите Firefox
  • Установите ImageMagick
  • Создать Баш скрипт для запуска Firefox по нужному адресу. Шахта выглядела так:

.

#!/bin/bash 
DISPLAY=:1 firefox & 
sleep 2s 
DISPLAY=:1 firefox -kill-all & 
sleep 1s 
DISPLAY=:1 firefox -url $1 & 
sleep 5s 
DISPLAY=:1 import -window root /var/www/images/screenshots/$2.png 
  • Выполнить скрипт PHP:

.

exec ('sh ../scripts/screencap.sh ' . $url . ' ' . $file_name); 

Самая сложная часть для меня заключалась в том, чтобы браузер отображался в полноэкранном режиме, когда произошел скриншот. Поскольку вы не можете напрямую обращаться к браузеру, вам нужно настроить все через конфигурационные файлы Firefox, что может занять некоторое время, чтобы понять.

Полезные ссылки, которые помогут вам начать работу:

http://semicomplete.com/blog/geekery/xvfb-firefox.html http://www.webmasterworld.com/forum21/9182.htm