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.

 

9 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é

  3. Besten Dank für das Script! Funktioniert – auch unter den neuen PHP 7 Versionen – einwandfrei und ist genau das was ich suchte.

    Schöne Grüße

  4. Hallo André,
    ich lese manchmal auch auf anderen Seiten (Foren etc.) dass es ungern gesehen wird, wenn ältere Artikel kommentiert und somit „nach oben geholt werden“. Solche Reaktionen finde ich völlig fehl am Platze. Genauso Dein Kommentar: „Ansonsten habe bitte Verständnis dafür, dass ich mich um acht Jahre Artikel nur in Ausnahmefällen kümmere.“ Entweder ist ein Artikel noch aktuell (gebrauchsfähig), oder er ist es nicht mehr. Da gibt es meines Erachtens kein „Alter“ oder Verfalldatum auf das man sich beziehen könnte. Du hättest diesen Artikel z.B. auch erst gestern ganz neu veröffentlichen können. Dann wäre er erst einen Tag alt. Dass der Artikel für Dich eine alte Kamelle ist, solltest Du Deinen Lesern nicht anlasten. Für die ist das Thema brandaktuell.

  5. Hallo Bernd,

    vielen Dank für Deinen Kommentar!

    Möglicherweise habe ich mich missverständlich ausgedrückt: Mich stört es keinesfalls wenn auf alte Blogposts kommentiert wird – ganz im Gegenteil!

    Und wenn jemand einen anderen Weg aufzeigt als von mir beschrieben, dann ergänze ich diesen auch gern als Update am Ende des Artikels – gern auch mit Codebeispiel des Kommentar-Autors, sofern ein solches geliefert wird.

    Beste Grüße
    André

Schreibe einen Kommentar zu Karsten Antworten abbrechen

Personenbezogene Daten interessieren mich nicht – daher ist die Angabe von Name und E-Mail-Adresse freiwillig. Jedoch wird jeder Kommentar von mir geprüft, bevor er freigeschalten wird.