2010-11-21 23 views
2

Vous êtes probablement familliar avec les services de miniatures de site Web là-bas comme websnapr.com par exemple.PHP exécutant script Bash retournant seulement des captures d'écran noir

Je travaille actuellement sur quelque chose comme ça avec des objectifs différents, donc j'ai eu besoin d'un serveur qui lancerait un webbrowser avec une url, prendre une capture d'écran et passer à la suivante.

C'est le script bash que j'exécute par bash script.sh 'http://google.nl' /var/www/images/google.png

#! /bin/bash 
export DISPLAY=":4" 
killall firefox-bin 
/usr/bin/firefox --display :4 "$1" & 
/bin/sleep 20 
xte "key F11" 
/bin/sleep 3 
/usr/bin/import -window root -display :4 "$2" 
/bin/sleep 3 
killall firefox-bin 

et j'ai un Xvfb en cours d'exécution par 'Xvfb: 4 -Screen 0 1024x768x24 &'

le script fonctionne très bien lors de l'exécution via ssh ou tout simplement le terminal de l'utilisateur standard, mais lorsque je tente de l'exécuter par php comme:

exec('bash /var/scripts/test.sh "http://google.nl" /var/www/char.png'); 

tout ce que je reçois est une capture d'écran entièrement noire de 1024x768, en regardant dans les journaux d'erreurs d'apache je vois qu'il ne peut pas tuer firefox quand je l'ai sous l'utilisateur principal (permission non autorisée) mais même quand il est fermé il ne peut pas commencer un (ne pas donner une erreur).

Une idée de ce qui ne va pas? Idéalement, puisque cela fonctionne sur mon utilisateur principal, il voudrait simplement pouvoir l'exécuter en tant qu'utilisateur au lieu de l'utilisateur www-data, la sécurité n'est pas un problème puisqu'il n'y aura pas de connexion directe à ce serveur (uniquement via un autre serveur le même réseau).

Répondre

3

Il n'est pas surprenant qu'une application exécutée à partir d'Apache ne puisse pas accéder au X11 comme il se doit. J'utiliserais xvfb + xvfb-run. D'autre part, tout en jouant avec xte dans les cas extrêmes est bien, c'est un peu hack lorsque vous avez des solutions propres; essayez des projets comme cutycapt ou similaire.

+0

problème est que je dois rendre le contenu flash, autant que je me souviens de la recherche ceux-ci est qu'ils ne supportent pas cela? (se référant à cutycapt) – M0rph3v5

+0

+ 1 pour suggérer CutyCapt, j'étais sur le point de recommander la même chose. – icanhasserver

+0

@ M0rph3v5: essayez-le et faites le nous savoir. Je ne vois pas pourquoi le contenu du flash ne devrait pas être rendu, cependant. – tokland