Bürgle: Automatisch prüfen, ob Link gebrochen ist (404)

Hi!

Auf meinem kleinen Projekt http://www.benotung.de werden Web-Adressen aus einer Datenbank ausgelesen und in einer durch PHP erzeugten HTML-Datei im Browser angezeigt.
Nun möchte ich prüfen, ob das Ziel der Web-Adresse tatsächlich existiert, um das Anzeigen von "toten Links" zu vermeiden.
Ich müsste also etwas basteln, was auf Status "404" überprüft.

Ich könnte mir gut vorstellen, das Ihr mir Tipps geben könnt für den Fall das nichts zu finden ist. Aber: ich will auch in der Lage sein, festzustellen, ob unter der URL überhaupt keine Ressource vorhanden ist, oder ob dort eine missing.html o.ä. aufgerufen wird. Man kennt ja die diversen Fehlermeldungen der verschiedenen Hoster... .
Kann mir jemand etwas dazu sagen?
Mir würde auch ein Ansatz oder ein Tipp zu einer "80%-igen Notlösung*" reichen, denn ich kann mir nicht vorstellen, das alle Hoster einheitlich bei der Fehlerausgabe vorgehen.

Grüße, Bürgle
http://www.benotung.de

* ca. 80% der toten Links sollen erkannt werden (nicht umgekehrt:)).

--

IE - No risk, no fun.
  1. Hallo Bürgle,

    Ich müsste also etwas basteln, was auf Status "404" überprüft.

    Baue eine Verbindung zu dem HTTP-Server, der in der URL angegeben ist auf, setze einen entsprechenden GET-Request ab, fälsche am besten noch einen User-Agent (damit jegliche serverseitige Browserweiche fehlschlägt) und evaluiere den HTTP-Status-Code. Damit dürftest Du die meisten abgedeckt haben. (Wenn der Hoster einen 302er sendet, dann kann man ihm auch nicht helfen, dass könntest Du höchstens per KI abfangen) Beispiele für "normale" HTTP-Anfragen gibt's zu hauf (die mit fsockopen arbeiten), Du müsstest die nur noch umschreiben.

    Du kannst auch noch andere Statuscodes abfangen, lies' Dir mal die HTTP-Spec durch (RFC 2616, http://www.ietf.org/rfc/rfc2616.txt), da kannst Du sehen, welche Status-Codes Dich interessieren.

    Aber: ich will auch in der Lage sein, festzustellen, ob unter der URL überhaupt keine Ressource vorhanden ist, oder ob dort eine missing.html o.ä. aufgerufen wird.

    Hää? Wenn die Resource nicht vorhanden ist, dann sendet der Server normalerweise einen 404er mit einem Body. Dieser kann personalisiert werden, Du kannst aber als Script nichts davon mitbekommen. Es gibt aber auch einige Hoster, die einen 302er mit Redirect auf eine Fehlerseite senden, die kannst Du aber wie gesagt nur per KI erkennen, es sei denn, du führst eine Liste mit Fehlerseiten, was aber auch anfällig ist.

    Mir würde auch ein Ansatz oder ein Tipp zu einer "80%-igen Notlösung*" reichen, denn ich kann mir nicht vorstellen, das alle Hoster einheitlich bei der Fehlerausgabe vorgehen.

    Laut HTTP-Spezifikation sollten sie aber (mögliche Stauscodes: 404, 301, 302 [1], 410) - das hat aber nicht nur etwas mit Hostern zu tun, sondern auch mit den "Webmastern"[tm], die mit .htaccess & co arbeiten.

    Grüße,

    Christian

    [1] Wobei 302 "Moved Temporarily" heißt, d.h. temporär nicht da. Der 302er wird von PHP automatisch generiert, wenn man einen Location-Header sendet *und* vorher keinen *anderen* 30x-Status-Code gesendet hat. Daher kann es auch sein, dass ein Auto-Redirect, der auf Content Negotiation / mod_rewrite basiert unter den 302er fällt. Außerdem leiten wie gesagt einige Hoster/Webmaster per 302er auf die Fehlerseite um, was nicht korrekt ist. (Das Errordocument kann, sofern es auf dem gleichen Server wie die nicht vorhandene Resource liegt, direkt ausgeliefert werden mit 404er, eine Weiterleitung ist bei Fehlerseiten Schwachsinn)

    --
    Ich bitte darum, dass ein Themenbereich (BARRIEREFREIHEIT) eingerichtet wird.
  2. Nun möchte ich prüfen, ob das Ziel der Web-Adresse tatsächlich existiert, um das Anzeigen von "toten Links" zu vermeiden.
    Ich müsste also etwas basteln, was auf Status "404" überprüft.

    Vielleicht hilft Dir das weiter:

    d.c.l.p-FAQ: Wie ueberpruefe ich Hyperlinks auf ihre Gueltigkeit?
    http://www.dclp-faq.de/q/q-code-links-testen.html

    Musterskript von Johannes Froemter:
    http://froemter.de/php/phpLinkCheck.phps

    HTH, mfg
    Thomas

  3. Hi!

    Danke für eure Beiträge.
    Ihr habt mir weitergeholfen.

    Grüße, Bürgle
    http://www.benotung.de

    --

    IE - No risk, no fun.