Hallo @all,
auf der Suche nach einer Möglichkeit den HTTP Statuscode von Domains zu ermitteln, bin ich auf eine interessante PHP Funktion gestoßen.
Der Sinn war sämtliche Linkleichen in einer Webkatalog-Datenbank aufzustöbern und zu entfernen.
| Code: |
/** file_getContents(URL) ** Aequivalent zu file_get_contents()
***************************************** (w) tleilax, 2006 ***
* Funktioniert auch bei allow_url_fopen=false, solange Sockets
* geöffnet werden können
*
* Übergabe:
* $url - Die auszulesende URL.
* $timeout - Zeit in Sekunden für den Verbindungsaufbau
* Rückgabe:
* String, der die komplette Rückgabe der auszulesenden URL enthält
***************************************************************/
function file_getContents($url, $timeout=30) {
// URL zerlegen
$parsedurl = @parse_url($url);
// Host ermitteln, ungültigen Aufruf abfangen
if (empty($parsedurl['host']))
return null;
$host = $parsedurl['host'];
// Pfadangabe ermitteln
$documentpath = empty($parsedurl['path']) ? '/' : $documentpath = $parsedurl['path'];
// Parameter ermitteln
if (!empty($parsedurl['query']))
$documentpath .= '?'.$parsedurl['query'];
// Port ermitteln
$port = empty($parsedurl['port']) ? 80 : $port = $parsedurl['port'];
// Socket öffnen
$fp = fsockopen ($host, $port, $errno, $errstr, $timeout);
if (!$fp)
return null;
// Request senden
fputs ($fp, "GET {$documentpath} HTTP/1.0\r\nHost: {$host}\r\n\r\n");
// Header auslesen
$header = '';
do {
$line = chop(fgets($fp));
$header .= $line."\n";
} while (!empty($line) and !feof($fp));
// Daten auslesen
$result = '';
while (!feof($fp)) {
$result .= fgets($fp);
}
// Socket schliessen
fclose($fp);
// Header auswerten
preg_match('~^HTTP/1\.\d (?P<status>\d+)~', $header, $matches);
$status = $matches['status'];
if ($status == 200) { // OK
return $result;
} elseif ($status == 204 or $status == 304) { // No Content | Not modified
return '';
} elseif (in_array($status, Array(300, 301,302,303,307))) {
preg_match('~Location: (?P<location>\S+)~', $header, $match);
$result = file_getContents($match['location'], $timeout);
} elseif ($status >= 400) { // Any error
return false;
}
// Ergebnis zurückgeben
return $result;
}
|
Gefunden bei
Klamm
grüße
Sven