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