URL mit PHP auf Existenz überprüfen

Manchmal ist es nötig Dateien auf anderen Servern zu referenzieren (z.B. Bilder, Audio, Video) oder auf diese zu verlinken: Um Duplikate zu vermeiden greifen beispielsweise die Webseiten einzelner Firmen-Fillalen auf zentral hinterlegte Fotos ihrer Mitarbeiter zurück um diese auf Kontaktseiten auszugeben. Oder ein IT-Dienstleister verlinkt seine Kunden innerhalb seine (gehosteten) Website auf seinen (lokalen) Testserver im Hinterzimmer seines Büros.

Damit in den geschilderten Fällen nicht unschöne Platzhalter (z.B. ein Bildrahmen mit rotem X) oder ungültige Links beim Ausfall des referenzierten Servers entstehen, kann es sinnvoll sein, die Existenz und Verfügbarkeit einer URL zu prüfen.

Die Funktion

Folgende Funktion fragt die Header bei der Ziel-URL ab, und prüft diese auf HTTP-Header:

<?php
function url_check($url) {
        $hdrs = @get_headers($url);
        return is_array($hdrs) ? preg_match('/^HTTP\\/\\d+\\.\\d+\\s+2\\d\\d\\s+.*$/',$hdrs[0]) : false;
    };
?>

Beispiel: URL auf Existenz überprüfen

Damit lässt sich nun die Verfügbarkeit der Ziel-URL feststellen und demenstprechend Ausgaben generieren. Zum Beispiel so:

<?php

    //Funktion deklarieren
    function url_check($url) { 
        $hdrs = @get_headers($url); 
        return is_array($hdrs) ? preg_match('/^HTTP\\/\\d+\\.\\d+\\s+2\\d\\d\\s+.*$/',$hdrs[0]) : false; 
    }; 

    //URL pruefen
    if(url_check('http://www.andreherdling.de')){
        //URL gueltig
        echo 'andreherdling.de ist erreichbar!';
    } else {
        //URL ungueltig
        echo 'andreherdling.de ist NICHT erreichbar!';
    };

?>

Datei auf Verfügbarkeit prüfen

Folgendes Beispiel prüft, ob ein bestimmtes Bild auf dem Remote-Server vorhanden ist und zeigt ein Platzhalterbild sollte dem nicht so sein:

<?php

    //Funktion deklarieren
    function url_check($url) { 
        $hdrs = @get_headers($url); 
        return is_array($hdrs) ? preg_match('/^HTTP\\/\\d+\\.\\d+\\s+2\\d\\d\\s+.*$/',$hdrs[0]) : false; 
    }; 

    //URL pruefen
    if(url_check('http://www.andreherdling.de/apple-touch-icon.png')){
        //URL gueltig
        echo '<img src="http://www.andreherdling.de/apple-touch-icon.png" alt="Icon" title="Icon" />';
    } else {
        //URL ungueltig
        echo '<img src="platzhalerbild.png" alt="Icon" title="Icon" />';
    };

?>

Fragen, Hinweise oder Verbesserungsvorschläge wie immer gern in den Kommentaren.

 

5 Kommentare Schreibe einen Kommentar

  1. Schon mal probiert wenn URL-Rewrites eingesetzt werden? Denn dann fällt dieses Kartenhaus hier gnadenlos zusammen … probier’s doch mal mit curl_getinfo

  2. Und? Nach einem anderthalb Jahre altem Hinweis nun endlich mal das eigene Script selbst ausprobiert.

    Es hilft keinem weiter, wenn keine zuverlässigen Ergebnisse erzielt werden. Die Scripte sind der Meinung das weder die URL noch das Bild existent ist.

    • Hallo Völlig Egal,

      selbstverständlich habe ich (2009) das Skript ausprobiert und es ist auch heute noch im Einsatz – allerdings in einer Umgebung OHNE URL-Rewirtes. Der Kommentar von Max Mustermann (vermutlich auch Du?) ist hier öffentlich einsehbar und jeder kann das Skript nach Belieben umschreiben oder eine gänzlich andere Lösung wählen.

      Ich zitiere hier mal aus der „Über das Blog„-Seite:

      Ich erhebe keinen Anspruch auf absolute Vollständigkeit und Korrektheit – Lösungen die für meine Zwecke funktioniert haben, müssen nicht allgemein gültig sein.

      Außerdem ging es in dem Artikel vor allem darum, Bilder auf Existenz zu prüfen – und Mediendateien werden i.d.R. (sicher gibt es da Ausnahmen) nicht über Rewrites ausgeliefert sondern liegen auf dem Pfad, den die URL beschreibt, tatsächlich vor.

      Wenn Du so großes Interesse an der Aktualität dieses Artikels hast, fühl Dich frei mir ein entsprechendes Skript zu senden, welches ich dann gern unter Nennung Deines Namens (wie auch immer der tatsächlich sein mag) hier veröffentliche.

      Ansonsten habe bitte Verständnis dafür, dass ich mich um acht Jahre Artikel nur in Ausnahmefällen kümmere.

      Beste Grüße
      André

Schreibe einen Kommentar