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.
Hallo,
die Funktion um zu überprüfen ob eine Datei existiert hat mir gerade mega geholfen.
Vielen Dank dafür und liebe Grüße!
Schon mal probiert wenn URL-Rewrites eingesetzt werden? Denn dann fällt dieses Kartenhaus hier gnadenlos zusammen … probier’s doch mal mit curl_getinfo
Klar, warum nicht. Danke für den Hinweis!
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:
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é
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
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.
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é
Hallo Andre,
auch wenn schon mittlerweile ur-ur-alt, aber genau der Schnipsel der mir weiter half!
Danke!
Karsten