You are not logged in.

wcf.regNote.message

Prometheus

Administrator

  • "Prometheus" started this thread

Posts: 3,278

  • Send private message

1

Monday, August 28th 2006, 10:38pm

Screenshots von Webseiten online erstellen.

Ich suche eine Möglichkeit um Screenshots von Webseiten direkt online zu erstellen. Also in der Art wie -> www.domain.de/screenshot.php?url=www.google.de um dann als Resultat den Screenshot der Googlewebseite zu sehen. Oder noch besser das Bild sofort speichern also sprich wenn ich eine Seite aufrufe wird geprüft ob es für den Link einen Screenshot gibt und wenn nicht wird dieser erst generiert und dann gespeichert.

Ich kann mir nicht so recht vorstellen das das mittels PHP überhaupt geht aber man soll die Hoffnung ja nicht aufgeben.

Ich hab was gelesen wie man angeblich ein shellscript erstellen kann welches dann Screenshots von Webseiten erstellt. Aber das funktioniert bei mir nicht da der erste Befehlt schon in die Hose geht.
Jedwege Anfragen bitte an Technomausi oder ShaoKhan richten. Dieses Konto ist und bleibt inaktiv.

badmoon2049

Intermediate

Posts: 188

Location: Leipzig

Occupation: Azubi

  • Send private message

2

Tuesday, August 29th 2006, 1:16pm

geht sowas wirklich ?... hätte auch interesse daran !!

Prometheus

Administrator

  • "Prometheus" started this thread

Posts: 3,278

  • Send private message

3

Tuesday, August 29th 2006, 1:26pm

Das sowas möglich ist steht fest. Ich bin nur nicht sicher ob das mit PHP möglich ist oder ob man nicht tatsächlich direkt auf dem Server mittels Shellskript was machen muss. Es gibt auch Dienste die sowas anbieten da musst du nur Werbung von denen auf deiner Seite platzieren und kannst den Dienst dann kostenfrei nutzen. Nur wenn ich sowas selbst machen kann dann würd ich das gerne machen.

Also falls ich irgendwie diese Shell Kommandos ans laufen bekomme das mein Webserver damit zurecht kommt hab ich ne Möglichkeit gefunden das auch via PHP zu machen. Das Stichwort dazu heißt PHPShell (http://mgeisler.net/php-shell/) und sollte dann funktionieren.
Jedwege Anfragen bitte an Technomausi oder ShaoKhan richten. Dieses Konto ist und bleibt inaktiv.

lichtonkel

Beginner

Posts: 39

Occupation: staat. gepr. Informatiker Multimedia/Studierender

  • Send private message

4

Saturday, September 30th 2006, 8:00pm

hallo,

das könnte evtl. mit shell_exec(); oder exec(); funktionieren... das problem ist nur, dass du wissen musst, welches OS auf dem server läuft, denn ich denke mal, dass sich die befehle um einen screenshot zu erstellen ziemlich voneinander unterscheiden ;-)

allerdings ist bei den meisten servern die option für die ausführung vonn shell kommandos in der php.ini ausser kraft gesetzt. zwar kann man per init funktion im kript ein paar einstellungen in der php.ini overriden, aber grade die funktion nicht. (sicherheit).

aber eigentlich muss ja auf dem rechner, auf dem der screenshot gemacht wird etwas zu sehen sein... d.h. es muss ne gui undn browser installiert sein. bei windows-servern ist das natürlich der fall, bei linuxkisten eher die ausnahme...
wenn man glück hat, will auch grade kein anderer user nen screenshot machen, und man bekommt sogar das gewünschte bild. anderenfalls wird das gewünschte bild von nem anderen fenster überlagert und man bekommt das falsche bild....

danach müsste das fenster dann wieder geschlossen werden... aber welches browserfenster auf dem server gehört denn mir?... ach, schließen wir einfach alle ;)
oder lassen wir das schließen? naja, nach einem tag betrieb dürfte dem server wohl die luft ausgehen, weil x-tausend browserfenster offen sind...

just my two cents
lichtonkel

Prometheus

Administrator

  • "Prometheus" started this thread

Posts: 3,278

  • Send private message

5

Sunday, October 1st 2006, 7:55pm

Ich hab endlich was gefunden womit das möglich ist in der console einen Screenshot zu erstellen. Allerdings funktioniert das bei mir irgendwie nicht so recht. Wenn ich versuche einen Screen zu machen und das Tool aufrufe bekomme ich als Rückmeldung nur "khtml2png: cannot connect to X server". Ich dachte mir dann hau ich auf meinem Webserver einfach mal kurz x11 drauf (inkl. libs usw.) aber auch das hat nicht geholfen. Wenn ich mittels xhost versuche zu schauen ob localhost bei der erlaubten hosts dabei ist meldet der mir nur "xhost: unable to open display """ und als Attribut +localhost blickt der ebenfalls nicht.

Zusätzlich fällt mir grade nicht ein wie ich das ganze jetzt noch aus einem PHP Skript heraus aufrufe. Am besten wäre es wenn nur alle 7 Tage ein neuer Screenshot erstellt wird damit nicht bei jedem Aufruf erst mal neue gemacht werden. Falls jemand das grade weiß wär ich Dankbar für nen Codeschnipsel welcher bewirkt "Existiert eine Datei mit Namen $GesuchteDatei und ist diese nicht älter als 7 Tage? ja -> $GesuchteDatei = Bild | nein -> erzeuge screenshot und danach $GesuchteDatei = Bild"
Jedwege Anfragen bitte an Technomausi oder ShaoKhan richten. Dieses Konto ist und bleibt inaktiv.

lichtonkel

Beginner

Posts: 39

Occupation: staat. gepr. Informatiker Multimedia/Studierender

  • Send private message

6

Monday, October 2nd 2006, 9:35am

moin prom

PHP Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
if (file_exists($_POST[file])
 {
   $alterDerDatei filectime($_POST[file]);
   
   $heute time();
   

   if (($heute $alterDerDatei) <= 604800)
   {
    die("screenshot vorhanden, und jünger als 7 tage");
   }
   else
  {
    shell_exec("khtml2png");
  }

 }
else
{
 shell_exec("khtml2png");
}



das müsste so ungefähr gehen... das kommandozeilentool werd ich heute abend mal testen...

der gruß
lightonkel

Prometheus

Administrator

  • "Prometheus" started this thread

Posts: 3,278

  • Send private message

7

Monday, October 2nd 2006, 9:38am

Das Tool hab ich von SourceForge runter geladen da bekommt man das. Allerdings was FAQ und das alles betrifft üben die sich ehr in Zürückhaltung. Das mit dem PHP Skript schaut gut aus. Ich werd mal testen ob dieser Teil schonmal läuft. Dann muss ich nurnoch das Tool ans laufen bekommen.

EDIT:
Mit Ephraims Hilfe konnte ich inzwischen schonmal erkennen das mein X Server zwar vorhanden ist aber nicht am laufen war. Der läuft jetzt schonmal. Allerdings die Static Version von dem Tool will dennoch nicht so wie ich das will. Und installiert bekomme ich das auch nicht weil KDE und das alles fehlen (denke ich).
Hier mal ein Link zu dem Teil. vielleicht kennt es ja jemand und kann mir sagen was zu tun ist.
http://khtml2png.sourceforge.net
Jedwege Anfragen bitte an Technomausi oder ShaoKhan richten. Dieses Konto ist und bleibt inaktiv.

lichtonkel

Beginner

Posts: 39

Occupation: staat. gepr. Informatiker Multimedia/Studierender

  • Send private message

8

Monday, October 2nd 2006, 11:14pm

soweit ich das sehe, muss die static nicht wirklich installiert werden, auspacken, chmodden und nach /usr/bin verschieben...
die normale version bekomm ich allerdings auch nicht installiert, weil angeblich meine kde-header fehlen.... naja, benutze nen backport für sarge von kde 3.5, kann evtl daran liegen...

aber was ich eigentlich sagen will... khtml2pngStatic ist zwar ausführbar, produziert aber bei mir nen speicherzgiffsfehler... versuche es nachher mal mit runtergefahrenem kdm... dann sollte es eigentlich klappen.

lichtonkel

Prometheus

Administrator

  • "Prometheus" started this thread

Posts: 3,278

  • Send private message

9

Monday, October 2nd 2006, 11:19pm

Nachdem ich nun meinem armen Server auch noch den KDE angetan hab und die Version 1.0.3 von diesem Tool genommen hab konnte ich es tatsächlich korrekt installieren. Es funktioniert sogar perfekt! Ich hab mir jetzt einfach zum testen einen Symbolic Link gemacht in einen Webordner den ich im Browser erreichen kann und hab mir ein Testskript gebastelt was eigentlich nichts anderes macht als den Aufruf welchen ich in der Console gemacht hatte nun aus einem Browser heraus aufzurufen. Und wie nicht anders zu erwarten geht es nicht. Erst hatte ich das Problem mit dem Safe Mode und irgendwas von wegen Backqoutes. Das hab ich gelöst und Fehler bekomme ich auch keinen mehr. Allerdings klappen will es dennoch nicht. Bin mir aber auch nicht sicher ob ich die Parameter korrekt übergebe.

Hier mal die Zeile mit dem exec.

PHP Source code

1
shell_exec("./khtml2png --width 1024 --height 768 --scaled-width 204 --scaled-height 152 ".$tmpurl." ".$imgdatei);

in $tmpurl steht drin "http://www.coder-board.de/" und in $imgdatei steht drin "www.coder-board.de.jpg" was unter Linux kein Problem darstellen sollte. Zumindest funktioniert der Aufruf perfekt in der Console. Was kann das jetzt noch sein?
Jedwege Anfragen bitte an Technomausi oder ShaoKhan richten. Dieses Konto ist und bleibt inaktiv.

lichtonkel

Beginner

Posts: 39

Occupation: staat. gepr. Informatiker Multimedia/Studierender

  • Send private message

10

Tuesday, October 3rd 2006, 4:43pm

moin

versuchs mal mit dem absoluten pfad zu khtml2png ... sind entsprechende rechte gesetzt?

shell_exec ist nicht auf deinen webordner beschränkt, und kann quasi alles ausführen, was der www-data user darf... zur not, kann man sich damit auch als root einloggen ;)

daher halte ich das ding auch für recht unsicher ;)


gruß
Lichtonkel

edit:

PHP Source code

1
2
3
4
<?php
$output shell_exec("/usr/bin/khtml2png ......");
echo "<pre>$output</pre>";
?>

gibt auch stdtout unter linux aus... als auch eventuelle fehlermeldungen..

This post has been edited 1 times, last edit by "lichtonkel" (Oct 3rd 2006, 4:47pm)


Prometheus

Administrator

  • "Prometheus" started this thread

Posts: 3,278

  • Send private message

11

Tuesday, October 3rd 2006, 7:12pm

Das mit dem Output hab ich auch schon eingebaut. Ich bekomme aber rein garkeine Rückmeldung von dem Skript. Hab auch schon versucht mittels sudo -uuser -ppasswort khtml... das Teil auszuführen aber das hat keinerlei Effekt. Ist zum irre werden mit dem Teil.
Jedwege Anfragen bitte an Technomausi oder ShaoKhan richten. Dieses Konto ist und bleibt inaktiv.

lichtonkel

Beginner

Posts: 39

Occupation: staat. gepr. Informatiker Multimedia/Studierender

  • Send private message

12

Tuesday, October 3rd 2006, 8:51pm

Quoted

Original von Prometheus
......
Hier mal die Zeile mit dem exec.

PHP Source code

1
shell_exec("./khtml2png --width 1024 --height 768 --scaled-width 204 --scaled-height 152 ".$tmpurl." ".$imgdatei);

in $tmpurl steht drin "http://www.coder-board.de/" und in $imgdatei steht drin "www.coder-board.de.jpg" was unter Linux kein Problem darstellen sollte. .....


sicher, dass die zieldatei auf *.jpg enden soll? soweit ich nun in anderen foren gelesen hab, kann das ding nur *.png ...

Prometheus

Administrator

  • "Prometheus" started this thread

Posts: 3,278

  • Send private message

13

Tuesday, October 3rd 2006, 8:54pm

Jep hab das getestet. Das Teil kann auch JPG ohne Probleme. In der Console klappt dieser Befehlt ja auch 1:1 exakt genau so. Nur über nen PHP Skript will das mist Ding einfach nicht.

Edit:
Hier mal das vollständige Skript. Vielleicht sieht ja jemand meinen Fehler.

PHP Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
$url "www.coder-board.de";
$subpath "/wbb2/";
$tmpurl "http://".$url.$subpath;
$imgdatei $url.".jpg";
$verzeichnis "/path/2/skript/";
$imgpath $verzeichnis.$imgdatei;
$execcmd "sh /path/2/skript/screenshot ".$tmpurl." ".$imgdatei;
$execcmd escapeshellcmd($execcmd);
if (file_exists($imgpath)) {
        $alterDerDatei filectime($imgpath);
        $heute time();
        if (($heute $alterDerDatei) <= 604800) {
                die("screenshot vorhanden, und jnger als 7 tage");
        } else {
                $result shell_exec($execcmd);
        }
} else {
        $result shell_exec($execcmd);
}
echo "<pre>$result</pre><br>";
echo '<img src="'.$imgpath.'" border="0">';
?>
Jedwege Anfragen bitte an Technomausi oder ShaoKhan richten. Dieses Konto ist und bleibt inaktiv.

ralle030583

Beginner

Posts: 51

Location: Neuss

Occupation: FI Anwendungsentwicklung

  • Send private message

14

Thursday, October 5th 2006, 7:49am

gibts einne Fehlermeldung oder macht es einfach nichts?

Prometheus

Administrator

  • "Prometheus" started this thread

Posts: 3,278

  • Send private message

15

Thursday, October 5th 2006, 8:50am

Es gibt keinerlei Fehlermeldung. Er macht ganz einfach nichts. In der Konsole dauert es auch einen Moment weil er die Webseite erst vollständig öffnet und dann das Bild ablegt aber bei meinem Skript ist der ruck zuck fertig und macht einfach nichts.

EDIT:
Ich hab jetzt das Skript mal in der Konsole mittels "php -f test.php" aufgerufen und da hat es einwandfrei funktioniert.

Ich muss dazu noch sagen das Shellskript das ich mir noch gebastelt habe startet vor dem Ausführen des Screenshot Tools den X und setzt das Ausgabedisplay. Das PHP Skript in der Console ausgeführt bringt mir dann die Meldung, das der X schon läuft aber das stört ja eigentlich nicht (denke ich zumindest). Wie könnte ich denn in meinem Skript prüfen lassen ob der X läuft bzw. die Fehlermeldung einfach übergehen? Nicht das er daran hängen bleibt und deswegen nicht weiter macht.

Inhalt von Screenshot

Source code

1
2
3
4
5
#!/bin/sh
X &
export DISPLAY=:0

./khtml2png --width 1024 --height 768 --scaled-width 204 --scaled-height 152 $1 $2

$1 ist dabei dann die URL welche übergeben wird
$2 ist der Name von dem Bild was angelegt werden soll

EDIT2:
Ich komme einfach nicht weiter. Aber es muss doch eine Erklärung dafür geben das es in der Konsole funktioniert und im Browser via PHP nicht oder? Gibt es Sicherheitseinstellungen die das verhindern könnten? Kann ich einem Webuser die Berechtigung geben expliziet dieses eine Script auszuführen oder sowas in der richtung? Außer mit den chmod meine ich.
Jedwege Anfragen bitte an Technomausi oder ShaoKhan richten. Dieses Konto ist und bleibt inaktiv.

lichtonkel

Beginner

Posts: 39

Occupation: staat. gepr. Informatiker Multimedia/Studierender

  • Send private message

16

Monday, October 9th 2006, 10:35am

hm...

das zuordnen sollte eigentlich mit chown bzw chgrp machbar sein....

vgl.: hier

ansonsten wüsste ich auch nicht, wodran es liegen könnte...

Gruß
Lichtonkel

This post has been edited 1 times, last edit by "lichtonkel" (Oct 9th 2006, 10:37am)


Ephraim

Professional

Posts: 826

Location: coder-board.info

Occupation: Info-Student

  • Send private message

17

Monday, October 9th 2006, 11:24am

Ich würde mal sagen, du hast ein Pfad Problem ...
du führst dein screenshot script relative aus sprich
sh /path/2/skript/screenshot http://www.coder-board.de/ www.coder-board.de.jpg

aber dann in deinem Script gehst du davon aus, des khtmlpage im CurrentWorkingDir liegt .... was es dann wahrscheinlich nicht tut.

Probiermal anstatt ./khtml2png .... einen aufruf mit dem absoluten Pfad zu khtml2png.

also /path/2/khtml2png/foo/bar/khtml2png in deinem screenshot script

Ciao Ephraim

Prometheus

Administrator

  • "Prometheus" started this thread

Posts: 3,278

  • Send private message

18

Monday, October 9th 2006, 12:09pm

Hab ich jetzt geändert aber hat leider keinen Effekt. Funktioniert nach wie vor nicht. Ich glaub ich hab einfach keine Berechtigung mit dem Webuser dieses Skript auszuführen oder irgendwas in der richtung.
Jedwege Anfragen bitte an Technomausi oder ShaoKhan richten. Dieses Konto ist und bleibt inaktiv.

ralle030583

Beginner

Posts: 51

Location: Neuss

Occupation: FI Anwendungsentwicklung

  • Send private message

19

Monday, October 9th 2006, 3:50pm

würde zum testen ob es an berechtigungen liegt dem screenshotscript den webuser mit passender grp sowie 0777 per chmod verpassen... wenns dann immernoch nicht geht liegt es an etwas anderem

also mit:

Source code

1
2
chown webuser.webgruppe script
chmod 0777 script


Die Berechtigung sollte aber nur zum testen auf 0777 gesetzt werden.
Eigentlich sollte es auch mit 0750 gehen wenn benutzer und grp zugewiesen sind.

This post has been edited 2 times, last edit by "ralle030583" (Oct 9th 2006, 3:53pm)


Prometheus

Administrator

  • "Prometheus" started this thread

Posts: 3,278

  • Send private message

20

Monday, October 9th 2006, 5:26pm

Nicht das ich langsam die Nerven verliere bei dem mist. Aber der Server kann froh sein das er nicht in meiner Nähe steht!

Ich hab die Dateien vollständig dem Web User zugeordnet so das alles unter diesem Benutzer läuft. Ferner hab ich jetzt an den exec Befehl noch ein "> log.txt" dran gemacht um ggf. die Ausgabe von dem Skript zu speichern. Das Log wird auch angelegt allerdings mit 0 Byte. Ich bekomme also weder im Browser noch im Log eine Meldung. Es scheint fast so als würde der Exec Befehl einfach ignoriert werden.

Ich hab übrigens auch schon einfach mal nur um zu testen ob ich überhaupt irgend einen Befehl ausführen kann nur ein "dir > log.txt" als Kommando benutzt und dies macht er problemlos. Ist also wirklich sehr verwunderlich warum es nicht geht.
Jedwege Anfragen bitte an Technomausi oder ShaoKhan richten. Dieses Konto ist und bleibt inaktiv.

wcf.user.socialbookmarks.titel