Krain Geschrieben 9. Dezember 2004 Teilen Geschrieben 9. Dezember 2004 Hallo zusammen, Ist es möglich mit PHP andere Websites auszulesen, und zu überprüfen, ob diese eine bestimmte Zeichenkette enthalten. Ich stelle mir das so vor: Ich habe eine Datenbank mit eingetragenen Domains, welche meine Dienste nutzen. Als Gegenleistung soll auf jeder Ihrer-Seiten ein Link auf mein Angebot sein. Um das nicht jedesmal selbst nachsehen zu müssen, möchte ich diesen Prozess der Überprüfung automatisieren. Ich habe mir schon Gedanken darüber gemacht. Nur weiß ich nicht, wie ich mit PHP andere Webseiten auslese. Hat jemand eine Idee oder einen Ansatz für mich. Kann ich auf anderen Domains die Verzeichnisstruktur auslesen? gruss markus Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Jaraz Geschrieben 9. Dezember 2004 Teilen Geschrieben 9. Dezember 2004 Hi, mit nem eigenen linux server könntest du mithilfe von Nagios den anderen Server überwachen und dem check_http command mitgeben das es nach einem bestimmten String im Quelltext suchen soll. So überwache ich meine Anwendungen, ob nicht nur der Apache läuft sondern auch diverse Datenquellen das richtige zurückliefern. Gruß Jaraz Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
kills Geschrieben 9. Dezember 2004 Teilen Geschrieben 9. Dezember 2004 sockets sind deine Freunde: http://de.php.net/manual/en/function.socket-connect.php Gruß, Markus Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
geloescht_JesterDay Geschrieben 9. Dezember 2004 Teilen Geschrieben 9. Dezember 2004 Ich habe mir schon Gedanken darüber gemacht. Nur weiß ich nicht, wie ich mit PHP andere Webseiten auslese. mit fopen In der php.ini muss nur allow_url_fopen = On gesetzt sein. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Krain Geschrieben 9. Dezember 2004 Autor Teilen Geschrieben 9. Dezember 2004 Gut, das hab ich inzwischen rausgefunden, aber der dir-Befehl und readdir funktionieren nicht! Ich brauch auch Unterverzeichnisse, wenn sie denn gelesen werden dürfen. Oder soll ich von der Homepage einfach alle Links auslesen, die auf dieser Domain bleiben? Das wäre wohl das günstigste. Meine Idee dazu: Ich hab als Angabe seine Domain. Ich lese mir die erste Seite aus und überprüfe alle Links, wenn die Links auf der selben Domain liegen, gehe ich diesen Links nach und lese das Ziel ebenfalls aus. Ich muss aber aufpassen, dass ich nicht eine endlosschleife durchlaufe, wenn sich Seiten gegenseitig verlinken. Haltet ihr das für realisierbar? gruss markus Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
DevilDawn Geschrieben 9. Dezember 2004 Teilen Geschrieben 9. Dezember 2004 fopen oder curl erlaubt natürlich das Auslesen, aber der Link muss ja nicht zwingend auf der Startseite sein. Problematisch wird also nur das Suchen. Und da würde ich mich primär Fragen ob PHP für diese Aufgabe geeignet ist. Ein Cronjob mit wget -m $DOMAIN, eine kluge Excludeliste dazu und ein einfaches grep sollten dich da schneller glücklich machen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
geloescht_JesterDay Geschrieben 9. Dezember 2004 Teilen Geschrieben 9. Dezember 2004 Meine Idee dazu: Ich hab als Angabe seine Domain. Ich lese mir die erste Seite aus und überprüfe alle Links, wenn die Links auf der selben Domain liegen, gehe ich diesen Links nach und lese das Ziel ebenfalls aus. Ich muss aber aufpassen, dass ich nicht eine endlosschleife durchlaufe, wenn sich Seiten gegenseitig verlinken. Haltet ihr das für realisierbar? Ja, halte ich schon für realisierbar. Es gibt ja auch schon Tools, die sowas in der Art machen (also komplette sites mit allen Dateien etc. auflisten). wie die genau funktionieren weiss ich nicht, aber so wie du sagst geht es auf jeden Fall. Um deine Endlosschleife zu verhindern kannst du einfach eine maximale tiefe angeben. Also du liest die Index.html (Teife = 0), dann die erste verlinkte Datei (tiefe = 1), dort auch die erste verlinkte Datei (Tiefe = 2), da wieder die erste verlinkte Date (Tiefe = 3). Sagen wir deine maximale Tiefe wäre 3 würdest du auf der Seite keine Links mehr verfolgen und aud der Tiefe 2 mit dem nächten Link weiter machen. Am Ende hast du alle Dateien durch ohne endlosschleife. Musst halt die maximale tiefe auf einen vernünftigen Wert einstellen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Krain Geschrieben 9. Dezember 2004 Autor Teilen Geschrieben 9. Dezember 2004 Ich habe einen Hostingvertrag ohne Cronjobs, und Linux ist eh nicht meine Stärke! Andere Vorschläge? Vielleicht eine Java-Applikation, welche aus der Datenbank meiner Homepage die verschiedenen URLs ausliest und das dann für mich übernimmt? Ich denke auch, dass PHP wohl eine ungünstige Lösung dafür ist, besonders wenn es sehr viele zu überprüfende URLs werden! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
kills Geschrieben 9. Dezember 2004 Teilen Geschrieben 9. Dezember 2004 Ich habe einen Hostingvertrag ohne Cronjobs, und Linux ist eh nicht meine Stärke! Andere Vorschläge? Vielleicht eine Java-Applikation, welche aus der Datenbank meiner Homepage die verschiedenen URLs ausliest und das dann für mich übernimmt? Ich denke auch, dass PHP wohl eine ungünstige Lösung dafür ist, besonders wenn es sehr viele zu überprüfende URLs werden! ich sehe kein Problem darin dieses Vorhaben in PHP umzusetzen. Allerdings müsstest du bestimmt bei einer größeren anzahl an url die max_execution time hochsetzen, da dass ein längerer Prozess werden könnte. ich würd einfach so machen: 1) index.htm/html/php/.... öffnen. 2) Prüfen ob die URL bereit in deinem Array enthalten ist 2a) Wenn Ja, nächsten Link vornehmen 2b) Wenn Nein => goto 1. 3) Url in einem Array merken 4) Den Sourcecode nach dem Link auf deine Domain durchforsten 4a) Wenn dein Bild gefunden wurde => abbruch 4b) dein Bild wurde nicht gefunden => nächster Link des Dokuments Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Krain Geschrieben 9. Dezember 2004 Autor Teilen Geschrieben 9. Dezember 2004 @kills: Hattest du nicht schon mal einen Thread hier, über ein Suchmuster zum Auslesen von Links aus einer Datei. Ich würde es mir zwar irgendwie zusammenschustern können, aber ich hab mich noch nie mit regex auseinandergesetzt. Hast du noch den link zu diesem Thread - ich habe ihn nicht gefunden. Mal sehen ich denke, dass ich es so dann hin kriege. Das einzige Problem werden wohl die regex. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
DevilDawn Geschrieben 9. Dezember 2004 Teilen Geschrieben 9. Dezember 2004 ich sehe kein Problem darin dieses Vorhaben in PHP umzusetzen. Allerdings müsstest du bestimmt bei einer größeren anzahl an url die max_execution time hochsetzen, da dass ein längerer Prozess werden könnte. Wenn von einem Hostingvertrag ohne Cron die Rede ist, ist es wohl kein Rootserver sondern nur ein vhost. Ob das dann Möglich ist ist zweifelhaft. 1) index.htm/html/php/.... öffnen. 2) Prüfen ob die URL bereit in deinem Array enthalten ist 2a) Wenn Ja, nächsten Link vornehmen 2b) Wenn Nein => goto 1. 3) Url in einem Array merken Ich würde ein Hash nehmen und das einfach durchgehen... alle Links werden pauschal ins Hash geworfen, wenns die schon gibt überschreiben sie sich ja - kein Prüfung nötig Also in etwa: $URLS = array("www.domain.de" => 1); reset($URLS); while (...) { # URL key(current($URLS)) durchsuchen, alle links als Hash # in $URLS ablegen next($URLS) } [/php] Da das Hash von Anfang bis Ende durchmaschiert wird erwischt du alle URLs genau einmal. Doppellinks die man ins Hash wirft überschreiben sich, keine Doubletten möglich. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Krain Geschrieben 9. Dezember 2004 Autor Teilen Geschrieben 9. Dezember 2004 Da das Hash von Anfang bis Ende durchmaschiert wird erwischt du alle URLs genau einmal. Doppellinks die man ins Hash wirft überschreiben sich, keine Doubletten möglich. Aber wie komme ich vorher an alle Dateien? Das ist ja die Frage. Ich dachte eher an eine rekursive Funktion, die immer wenn ich einen Link finde in einem Array prüft, ob der Link schon vorhanden, wenn nicht eintragen und link untersuchen, wenn vorhanden, dann überspringen und nächster link. bis ich eben wieder am anfang bin. Ich will eh nur alle html, php, etc.. Dateien dieser domain durchsuchen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
DevilDawn Geschrieben 9. Dezember 2004 Teilen Geschrieben 9. Dezember 2004 Aber wie komme ich vorher an alle Dateien? Das ist ja die Frage. Das Hash wächst wärend das Script läuft. z.B existieren: index.html : Hat links auf /impressum.html, www.disney.com und /firma/agb.html Am Anfang enthält dein Hash nur den Link zur index.html. Beim Lesen und Parsen stösst man auf die anderen Links. Disney.com ist extern, den ignoriert man. Die anderen werden ins Hash gepackt. Wenn das Parsen beendet ist, ist das Hash gewachsen und die "Aussenschleife" läuft natürlich weiter. Aber die Schleife ist wohl in erster Linie mal dein sekundäres Problem. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
kills Geschrieben 9. Dezember 2004 Teilen Geschrieben 9. Dezember 2004 ich glaube mit XLS kommste da auch weiter.... da gabs ma was,... Moment ich schau ma edit: hm das hies nicht XLS das heisst irgendwie anders.... da musst ma Enrico.T fragen, der weiss was ich meine :-) Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
kills Geschrieben 9. Dezember 2004 Teilen Geschrieben 9. Dezember 2004 ich hab da was gefunden: <xsl:template match="/body/table/tr/td/table/tr/td/table" > <xsl:call-template inhaltBearbeiten /> </xsl> <xsl:template name="inhaltBearbeiten"> Datum: <xsl:value-of select="tr/td/p/b" /> Link: <xsl:value-of select="tr/td/p/a/@href" /> Inhalt: <xsl:value-of select="tr/td/p/a" /> </xsl> Das sollte es in etwa sein. ======> Anmerkung: Funktioniert nur wohlgeformten HTML-Dateien siehe: post: http://forum.fachinformatiker.de/showpost.php?p=622511&postcount=5 thread: http://forum.fachinformatiker.de/showthread.php?t=68428 demnach könntest du das so ungefähr machen: <xsl:template match="/body/a" > <xsl:call-template inhaltBearbeiten /> </xsl> <xsl:template name="inhaltBearbeiten"> Link: <xsl:value-of select="a/@href" /> Inhalt: <xsl:value-of select="/a" /> </xsl> ungetestet und ohne gewähr! das ganze wird dann so gehandelt: // "datei" holen und temporär speichern // dateiname der datei in $xml speichern $xslt = xslt_create(); xslt_set_encoding($xslt, "iso-8859-1"); $result = xslt_process($xslt,$xml,$xsl,$result,$args,$params) or die( "<b>Es ist folgender Fehler aufgetreten:</b><br/>". xslt_errno($xslt).": ".xslt_error($xslt) ); xslt_free($xslt); [/PHP] Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Krain Geschrieben 9. Dezember 2004 Autor Teilen Geschrieben 9. Dezember 2004 @ DevilDawn: $URLS = array("www.domain.de" => 1); reset($URLS); while (...) { # URL key(current($URLS)) durchsuchen, alle links als Hash # in $URLS ablegen if(!in_array("seiten/index.htm",$URLS)) { $URL["seiten/index.htm"] = sizeof($URLS)+1; } next($URLS) } [/PHP] Stellst du dir das so vor? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Krain Geschrieben 9. Dezember 2004 Autor Teilen Geschrieben 9. Dezember 2004 @kills: Muss dafür nicht gewährleistet sein, dass es sich um XML-konforme Seiten handelt? Ich weiß nicht, ich kenn mich null mit XSLT aus, aber ich meinte immer, dass man zumindest wohlgeformtes XML dafür benötigt? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
kills Geschrieben 9. Dezember 2004 Teilen Geschrieben 9. Dezember 2004 hmmmm..... =====> Anmerkung: Funktioniert nur wohlgeformten HTML-Dateien Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Krain Geschrieben 9. Dezember 2004 Autor Teilen Geschrieben 9. Dezember 2004 Das heißt also, ich brauche doch einen reglären Ausdruck mit dem ich mir die Links aus der Datei rausschneiden kann. Ich hatte übrigens den Thread von dir mit regulären Ausdrücken gefunden. Regex Aber ich bekomme den Ausdruck trotzdem nicht hin. Bisher habe ich: echo eregi("[^<a.+?href=\"?\".+?/?>]",$text,$myA); echo sizeof($myA); [/PHP] Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
kills Geschrieben 9. Dezember 2004 Teilen Geschrieben 9. Dezember 2004 hm RegEx ist auch nicht meine Stärke... mein Versuch: "[^<a.+?href=\"?.*\"?.+?/?>]" [/PHP] aber versuche die [b]p[/b]reg functionen zu nutzen, die sind performanter. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Krain Geschrieben 9. Dezember 2004 Autor Teilen Geschrieben 9. Dezember 2004 Gut - ich denke das ist wieder ein anderes Thema -> deshalb neuer Thread... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
beebof Geschrieben 13. Dezember 2004 Teilen Geschrieben 13. Dezember 2004 Das heißt also, ich brauche doch einen reglären Ausdruck mit dem ich mir die Links aus der Datei rausschneiden kann. Ich hab sowas auch mal gemacht... meine RegEx: // Dateiinhalt befindet sich in $datinhalt preg_match_all("/(href=\")[^\"]+\"|(src=\")[^\"]+\"|(background=\")[^\"]+\"|(action=\")[^\"]+\"/i",$datinhalt,$treffer); foreach ($treffer[0] as $neuedatei) { // hier dann weiter überprüfen, der Link befindet sich in $neuedatei ... } [/php] Hier überprüfe ich nicht nur auf href, sondern auch auf src,background und action (brauchte ich halt damals) Wenn du nur auf href überprüfen willst, änder die erste Zeile so: [PHP] preg_match_all("/(href=\")[^\"]+\"/i",$datinhalt,$treffer); Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Krain Geschrieben 14. Dezember 2004 Autor Teilen Geschrieben 14. Dezember 2004 preg_match_all("/href=[\'\"](.*?)[\'\"?]/", $text, $text2); foreach($text2[1] as $value) { // Auswertung } [/PHP] Ich habe es so gelöst, da ich die GET Parameter nicht brauche. Mir reichen nur die Seiten. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Krain Geschrieben 14. Dezember 2004 Autor Teilen Geschrieben 14. Dezember 2004 preg_match_all("/(href=\")[^\"]+\"/i",$datinhalt,$treffer); [/PHP] Ich hätte ein paar Fragen zu diesem regEx: 1. Was bedeutet das ^ in der ersten eckigen Klammer. Meine Vermutung war "Beginnend mit \" ". 2. Was bedeutet das "/i" am Ende? So wie ich es verstanden habe wurde hier '/' als Begrenzer eingesetzt aber was bedeutet das 'i'? gruss markus Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
beebof Geschrieben 17. Dezember 2004 Teilen Geschrieben 17. Dezember 2004 preg_match_all("/(href=\")[^\"]+\"/i",$datinhalt,$treffer); [/PHP] Ich hätte ein paar Fragen zu diesem regEx: 1. Was bedeutet das ^ in der ersten eckigen Klammer. Meine Vermutung war "Beginnend mit \" ". Das bedeutet "alles außer", soll heißen, dass er hier [^\"] alle Zeicehn aufnimmt, die kein " enthalten 2. Was bedeutet das "/i" am Ende? So wie ich es verstanden habe wurde hier '/' als Begrenzer eingesetzt aber was bedeutet das 'i'? ohne Beachtung der Groß- und Kleinschreibung Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.