PHP: How to capture browser window screen with php?

There is imagegrabscreen() and imagegrabwindow(), which would allow you to programmatically create screenshots from a browser running on the same machine via COM (Win only though). See the comments in the manual for how to omit the browser's chrome. With DCOM enabled, this would also work with remote windows machines that have been setup to allow access through DCOM.

On a sidenote for those that said PHP does not know about the browser, I'd suggest a look at get_browser() in the PHP manual. It's not much, but hey, it's not nothing.


This can absolutely be done, it just takes a little more than PHP to make it happen. I have an application written in PHP that takes snapshots of websites at certain intervals. It's a bit tricky to get going but here's the steps I took on a Linux machine:

  • Install Xvfb (or vnc-server) to emulate an X Windows session in memory. Start Xvfb on display :1
  • Install Firefox
  • Install imagemagick
  • Create a bash script to run Firefox on the desired URL. Mine looked like this:

.

#!/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
  • Execute the script from PHP:

.

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

The trickiest part for me was to get the browser to be full screen when the screenshot occurred. Because you can't access the browser directly, you have to configure everything via Firefox's config files, which can take some time to figure out.

Useful links to help you get started:

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


PHP knows nothing about the browser. In fact, usually the PHP has finished running before the browser receives the data.

If it is possible at all, it will have to be a client-side system such as Javascript. This can traverse the DOM, and so capture the model that the browser thinks it is displaying; but I don't recall seeing any tool to capture the actual graphics. In any case, it is not clear what you could do with such information. Browsers do not let Javascript access local files. I suppose you could in principle send it back to the server in an Ajax call.


Fundamentally unsupported by the architecture of the Internet, and for good reason. The server you're connecting to shouldn't have any more information about you than necessary to process and respond to your request. The server CERTAINLY shouldn't be able to capture information about what you're viewing on screen.

That said, you can probably rig something up involving client-side technologies like ActiveX or Flash or Java, which would capture the screen and then post it back to the server in an AJAX request, but you probably shouldn't. I can't imagine what kind of use you'd have for such a thing, other then perhaps debugging layout issues.