Prüfen ob URL existiert und funktioniert

Hallo,

ich suche nach einer Möglichkeit, eine URL auf Vorhandensein zu überprüfen. D.h. ich möchte überprüfen ob ein eigentragener URL auch existiert und ob die Seite auch funktioniert. Wenn die Seite nicht existiert z.Bsp. http://www.dkffljndljjnss.de oder so, soll das angezeigt werden. Es geht auch darum ob bei der Überprüfung ein Fehlerseite angezeigt wird.

Ich habe es schon mit:

strlen( file( $url ) )

versucht, doch das funktioniert nicht korrekt. Wäre super wen jemand Rat wüsste. Ich komm nicht mehr weiter.

Danke
-Michael

Das Problem ist sehr viel schwieriger, als es auf den ersten Blick aussieht, wenn die zu prüfende url auf einem fremden server/domain liegt…

Vielleicht hilft dir das weiter:
http://selfforum.teamone.de/archiv/2000/9/21529/
… ist das beste, was ich zu dem Thema finden konnte. Hab im Moment ein ähnliches Problem.

Wär natürlich Klasse, wenn jemadn 'ne einfachere Lösung findet und die hier bekannt gibt… :wink:

Das Problem ist sehr viel schwieriger, als es auf den ersten
Blick aussieht, wenn die zu prüfende url auf einem fremden
server/domain liegt…

Vielleicht hilft dir das weiter:
http://selfforum.teamone.de/archiv/2000/9/21529/
… ist das beste, was ich zu dem Thema finden konnte. Hab im
Moment ein ähnliches Problem.

Leider ist der Link Tod. Bzw. der ganze Server, sieh selbst nach :smile: aber Danke für Deine Mühe.

Wär natürlich Klasse, wenn jemadn 'ne einfachere Lösung findet
und die hier bekannt gibt… :wink:

bei mir gehts
und das relevante darin ist folgendes:

(PHP) Datei prüfen

Die folgende Nachricht zum Thema stammt von: Carsten, 23. September 2000, 22:45 Uhr

Hallo,

»» ../../sfarchiv/2000\_3/t20758.htm#a105664

Das war etwas umständlich in der Handhabung und nicht ganz fehlerfrei.

Da die Funktion ab und an mal benötigt wird gibt es inziwschen eine
getestete Version davon:


/\*
 Liefert den HTTP-Status zu einer URL zurueck.
 Handhabt Redirects.

 Parameter:
 $location URL, z.b. "http://www.teamone.de/"
 keine Pruefung auf korrektes Format
 Rueckgabe:
 int status 200=OK 404=nicht gefunden usw. (s. RFC2616)
\*/
function head($location)
{
 $verbose=1; // 1 Header im Dokument ausgeben (Debug)
 // 0 nur Status zurückliefern (normal)

 $location=trim(preg\_replace("/^http:\/\//i","",$location));

 $c=strpos($location,"/");
 if(!$c)
 {
 $host=$location;
 $pfad="/";
 }
 else
 {
 $host = substr($location,0,$c);
 $pfad = substr($location,$c);
 }

 if($verbose)
 echo "Location: $location 
\n host: $host 
\n pfad: $pfad 
\n**";  
  
 $fp = fsockopen($host, 80, &$errno, &$errstr, 5);  
 // ^^ Portnr. ^ - Timeout in Sekunden  
  
 if($fp)  
 {  
 fputs($fp,"HEAD $pfad HTTP/1.0\r\n");  
 fputs($fp,"Host: $host\r\n");  
 fputs($fp,"User-Agent: PHP/StatusCheck V0.2\r\n");  
 fputs($fp,"\r\n"); // Request Header Ende  
  
 while(!feof($fp)) // Antwort lesen  
 {  
 $c=fgets($fp,133);  
  
 if(strlen($c)==2)  
 break; // Leerzeile erkannt == Header Ende  
  
 if($verbose) echo htmlentities($c)."  
\n";  
  
 if(preg\_match("/^HTTP.\*? ([0-9]{3})/i",$c,$match))  
 $status=0+$match[1];  
  
 if(preg\_match("/^Location: (.\*)$/i",$c,$match))  
 $newLocation=$match[1];  
 }  
  
 if($verbose) echo "**  
   =\>Status: $status
\n
\n";

 if(($status==302 $status==301) && $newLocation)
 return(head($newLocation));
 else
 return ($status);

 fclose($fp);
 }
 else
 {
 if($verbose)
 {
 echo "Verbindungsaufbau zum Server fehlgeschlagen.";
 echo "Errno:blush:errno Errstr:blush:errstr

\n\n";
 }
 return 0;
 }
}

/\*\*\*\*\*\*\*\*\* Testgelände \*\*\*\*\*\*\*\*\*\*/

function checklink($loc,$text)
{
 if(head($loc)==200)
 echo "[$text](%255C%2522%2524loc%255C%2522)


";
 else
 echo " **$text** ist zur Zeit nicht verfügbar 


";
}

checklink("http://www.teamone.de/selfhtml/","SelfHTML");
checklink("http://www.mond.de","Redirect Beispiel");
checklink("http://www.heise.de/tp","Telepolis - lesenswert");
checklink("http://www.michgibtesnicht.de","unbekannte Domain");
checklink("http://www.altavista.de/gibtsauchnicht","LinkInsNirvana");

?\>

Ein Nachteil sei nicht verschwiegen: Das dauert ewig. Für Linklisten
ist das so direkt eigentlich nicht geignet. Da muss man dann ein weiters
Script schreiben (und ab und an händisch anwerfen), das dieses Script
aufruft und die Ausgabe in eine (statische HTML) Datei schreibt.
../../sfarchiv/2000\_2/t15138.htm#a76662


Gruss,
Carsten

Funktioniert wunderbar!!!
Danke!

-Michael