phpbar.de logo

Mailinglisten-Archive

[php] AW: [php] Statuscodes eines Servers abfragen

[php] AW: [php] Statuscodes eines Servers abfragen

Matthias Klos matthias.klos_(at)_fh-gelsenkirchen.de
Fri, 6 Oct 2000 19:36:52 +0200


-----Ursprüngliche Nachricht-----
Hallo Liste,
ich möchte die Gültigkeit von URL-Einträgen in einer DB kontrollieren.
Hierfür soll die URL aufgerufen und anschließend der vom Server
zurückgelieferte Wert ausgewertet werden.

----- Antwort aus Liste ---------
>>von Tobias Orterer
>>Gesendet: Samstag, 5. August 2000 18:13
>>An: php_(at)_php-center.de
>>Betreff: Re: [php] Statuscodes eines Servers abfragen
>>
>>mit fopen() öffnen kompl einlesen und mit strstr($ganzeeingeleseneseite,
>>"404") schaun obsn 404´er is ;o)
----- Antwort auf Antwort -------
 RE:
Danke Tobi!
Bei meinen Recherchen bin ich auf folgende Funktion gestoßen.
Die Lösung meiner Probleme und damit die Ersparniss vermutlich tagelangen
Kopfzerbrechens:

<?
function check($url) {
   if (!eregi("^http://", $url)) {
      if (eregi("^mailto:", $url)) {
	     $url = trim(eregi_replace("^mailto:(.+)", "\\1", $url));
		 list($brugernavn, $host) = split("_(at)_", $url);
		 $dnsCheck = checkdnsrr($host,"MX");
		 if ($dnsCheck) $return[code] = "OK";
		 else $return[code] = "ERROR";
	  }
      else $return[code] = "N/A";
   }
   else {
      $urlArray = parse_url($url);
         if (!$urlArray[port]) $urlArray[port] = "80";
         if (!$urlArray[path]) $urlArray[path] = "/";
         $sock = fsockopen($urlArray[host], $urlArray[port], &$errnum,
&$errstr);
         if (!$sock) $return[code] = "Død";
         else {
            $dump .= "GET $urlArray[path] HTTP/1.1\r\n";
            $dump .= "Host: $urlArray[host]\r\nConnection: close\r\n";
            $dump .= "Connection: close\r\n\r\n";
            fputs($sock, $dump);
	        while($str = fgets($sock, 1024)) {
	          if (eregi("^http/[0-9]+.[0-9]+ ([0-9]{3}) [a-z ]*", $str))
$return[code]        = trim(eregi_replace("^http/[0-9]+.[0-9]+ ([0-9]{3})
[a-z ]*", "\\1", $str));
		       if (eregi("^Content-Type: ", $str))
$return[contentType] = trim(eregi_replace("^Content-Type: ", "", $str));
	        }
	        fclose($sock);
            flush();
         }
   }
	  return $return;
}
// Test der Funktion und Ausgabe der Ergebnisse
$url="http://www.irgendwas.de/pfad/seite.htm";
$test=check($url);
while(list($k, $v) = each($test)) printf("k=%s, v=%s<br>\n", $k, $v);
?>



php::bar PHP Wiki   -   Listenarchive