views:

871

answers:

9

Hi,

First of all, i am not sure, if it is possible to capture browser window screen with php, then how to do it?

If it is possible, the best will be to capture just the website content excluding browser parts such as menubar, toolbar, statusbar, etc.

Thanks

+2  A: 

No personal experience, but maybe this could be a starting point: http://www.zubrag.com/scripts/website-thumbnail-generator.php

The MYYN
A: 

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.

Colin Fine
Well it does know the browser's user agent string. But nothing about the client's actual computer.
Nick Bedford
+1  A: 

This can't be done with php, since it's server side which means by the time it reaches the users browser it's already processed. Or at least that's my understanding of the functionality of php.

johnnyArt
Can be done. You just cannot grab my browser from your server.
Gordon
That's what I said, php cant capture user side broswers screen.
johnnyArt
Actually, I just found out it can, if both server and client have been setup to allow use of DCOM.
Gordon
Gordon's point is that, while you can't "grab my browser from your server", your server *can* render webpages on its own, either by using a browser running on the same server, and effectively taking a screenshot, or by rendering the page without a full browser, using a package like html2ps
Frank Farmer
+4  A: 

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.

Gordon
A: 

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 necessairy 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.

meagar
A: 

You can't do this from PHP (server-side).

But you could shell out and use one of the many HTML to PDF converters to capture the image (and there are plenty of tools to convert a PDF to something else).

C.

symcbean
+3  A: 

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

Andy Baird
+1  A: 

There's BrowserShots, an automated service that makes browser screen shots. There are other such services around as well.

Pekka
+2  A: 

I've had a measure of success with html2ps.

Frank Farmer