Abfrage, ob URL existiert
Julian Hofmann
- php
0 André Laugks0 Carsten0 Jan Lehnardt0 Slyh0 Carsten0 Björn Höhrmann
0 André Laugks
Hallo,
Meine Situation:
Aus einer Datenbank werden Linkdaten ausgelesen. Leider kommt es aber vor, daß die externen Link manchmal gar nicht mehr existieren.
Mein Problem:
Aus obigem Grund möchte ich vor der Ausgabe einen Linkcheck mit PHP ausführen lassen, nur habe ich keine Ahnung in welcher Richtung ich anfangen muß ein Script zu basteln. Hat jemand eine Idee?
Vielen Dank im voraus.
Grüße aus Bayreuth
Julian
Hallo!
Aus einer Datenbank werden Linkdaten ausgelesen. Leider kommt es aber vor, daß die externen Link manchmal gar nicht mehr existieren.
Hinter jedem Link steht auch eine Datei. In PHP gibt es dafür eine Funktion, und zwar file_exists().
http://www.php.net/manual/function.file-exists.php
mfg, André Laugks
Hallo André,
das geht so nicht,
....Funktion, und zwar file_exists().
[link:http://www.php.net/manual/function.file-exists.php]
denn
file_exists() will not work on remote files; the file to be examined must be accessible via the server's filesystem.
gehen tut:
if($fp=fopen("http://www.domain.de/seite.htm,"w"))
{ echo "Seite da;
fclose($fp);
}
Problem könnte werden, dass das recht lange dauern kann wenn der Server breit ist.
Gruss,
Carsten
Hi,
gehen tut:
»» if($fp=fopen("http://www.domain.de/seite.htm,"w"))
»» { echo "Seite da;
»» fclose($fp);
»» }
das loesst aber nciht das Problem eines 404 oder aehnlichen Fehlers, da in dem Fall auch eine HTML seite gesendet wird.
mann muesste die zurueckgegebene Seite auf 404 Error oder Aehnliches untersuchen.
Jan
PS: eine instanloesung hab ich zu spaeter stunde leider nicht bereit, sorry
Hi,
das loesst aber nciht das Problem eines 404 oder aehnlichen Fehlers, da in dem Fall auch eine HTML seite gesendet wird.
mann muesste die zurueckgegebene Seite auf 404 Error oder Aehnliches untersuchen.
Nun, ich habe soetwas einmal in Perl programmiert. Dort kann man Requests schicken. Statt einem "GET"
(wie beschrieben) zu schicken, der ja eine existierende Datei laden soll, und entsprechend eine Fehlerseite
bringt, wenn die Datei eben nicht existiert, kann man einen "HEAD"-Request schicken. Wenn dieser
erfolgreich ist, existiert die Seite/Datei.
Was das jetzt hilfreich? Ich muß zugeben keine Ahnung von PHP zu haben...
Gruß,
Slyh
Hallo Jan,
erster Fehler:
»» if($fp=fopen("http://www.domain.de/seite.htm,"w"))
r !!
das loesst aber nciht das Problem eines 404 oder aehnlichen Fehlers, da in
dem Fall auch eine HTML seite gesendet wird.
klar, nicht dran gedacht... also zu Fuss Header holen:
function head($host,$loc)
{
$fp = fsockopen($host, 80, &$errno, &$errstr, 15);
if($fp)
{
fputs($fp,"HEAD $loc HTTP/1.0\r\n");
fputs($fp,"Host: $host\r\n");
fputs($fp,"\r\n");
while(!feof($fp))
{
$c=fgets($fp,128);
if(strpos("~".$c,"HTTP")==1)
$status=0+substr($c,strpos($c," ")+1,3);
}
fclose($fp);
if($status!=200)
echo " Error! Status:$status Errno:$errno Errstr:$errstr\n";
return $status; // 200 =OK; 404 =not Found etc.
}
else
{
echo "No Connection to Host $host\n";
return 0;
}
}
geht bestimmt auch eleganter, ich hab das ausm Programm von mir rauskopiert
und zusammengestrichen. (_so_ ungetestet, handelt keine redirects ...)
Gruss,
Carsten
das loesst aber nciht das Problem eines 404 oder aehnlichen Fehlers, da in dem Fall auch eine HTML seite gesendet wird.
mann muesste die zurueckgegebene Seite auf 404 Error oder Aehnliches untersuchen.
Simpel, ich habe eine komplette PHP HTTP Bibliothek geschrieben, inklusive URI Parser. Leider bin ich zu faul eine Dokumentation zu schreiben, daher ist diese unveröffentlicht. Bei interesse, insbesondere zur konstruktiven Kritik, kann ich das, bei Anfrage per Mail, Interessierten zukommen lassen. Feedback ist allerdings Pflicht.
Hallo!
das geht so nicht,
....Funktion, und zwar file_exists().
http://www.php.net/manual/function.file-exists.phpdenn
file_exists() will not work on remote files; the file to be examined must be accessible via the server's filesystem.
Ich dachte Du meintest innerhalb Deines Server bzw. URL, so eine Art Linkchecker, falls Du Referenzen gespeichert hast.. Wenn es sogar fremde Server sind, würde ich auf den Tipp vom Jan setzen.
Hast Du mal in der FAQ http://www.koehntopp.de/php/ vom Köhntopp geschaut?
mfg, André Laugks