Überprüfen, ob Webseite erreichbar ist

Sasser

Erfahrenes Mitglied
Guten Abend!

Derzeit verwenden ich fopen um zu prüfen, ob eine Webseite erreichbar ist. Jedoch liefert diese Funktion, je nach Serverkonfiguration auch false.

Gibt es eine zuverlässige Möglichkeit zu prüfen, ob eine Webseite erreichbar ist?
 
Was exakteres als den Port zu öffnen, ein GET abzusetzen und den HTTP-Response-Code abzufragen wirds wohl nicht geben.

PHP:
$address = 'www.test.de';

$sock =fsockopen( $address, 80, $errno, $errstr, 5 );
if( ! $sock ) die( $errstr );

$http_header =   "GET / HTTP/1.1\r\n" .
  "Host: $address\r\n" .
  "Connection: Close\r\n\r\n";

if( fwrite( $sock, $http_header ) != strlen( $http_header ) ) {
  die( "Send request short write - could not send the header correctly" );
}

while ( ! feof( $sock ) ) {
  $response_line = fgets( $sock, 128 );
  // Just for debug:
  echo $response_line . "<br/>";

  // Here the response line has to be analyzed
}

Oder so ähnlich.
 
Hallo!

Ich habe mir bereits eine eigene Funktion gebaut:

PHP:
function online($url) {
	if (filter_var ( $url, FILTER_VALIDATE_URL ) == true) {
		$connection = curl_init();
		curl_setopt ( $connection, CURLOPT_URL, $url );
		curl_setopt ( $connection, CURLOPT_USERAGENT, $_SERVER ["HTTP_USER_AGENT"] );
		curl_setopt ( $connection, CURLOPT_RETURNTRANSFER, true );
		curl_setopt ( $connection, CURLOPT_VERBOSE, false );
		curl_setopt ( $connection, CURLOPT_CONNECTTIMEOUT, "5" );
		curl_setopt ( $connection, CURLOPT_TIMEOUT, "5" );
		curl_exec( $connection );
		$status = curl_getinfo ( $connection );
		curl_close( $connection );
		if (($status ["http_code"] >= "200") && ($status ["http_code"] < "300")) {
			return true;
		} else {
			return false;
		}
	} else {
		return false;
	}
}

if (online ( "http://www.google.de" ) == true) {
	echo "Online";
} else {
	echo "Offline";
}

Diese dürfte doch auch funktionieren und zuverlässig sein oder?
 
Hallo,

es hängt von der Serverkonfiguration ab. Bedenke dabei Skripte wie von Saftmeister, benutzen auch "anonymos" um den Server in die Knie zu zwingen. Also kann es schon durch aus sein, das genau dies unterbunden wird. Dazu gab es einen interessanten Artikel in der letzen CT.

beste Grüße
 
Das mag ja sein, aber letztendlich emuliert PHP da einfach nur einen HTTP Request. Den einzigen Grund warum man diesen blocken könnte, wäre dass so noch kein richtiger User Agent String übergeben wird.

Aber auch das kriegt man per Erweiterung des Requests hin.
 
und ebend keine Antwort kommt... :) Warum?....:)

Gut ich versuche es mal zu erklären.... Client stellt eine Anfrage, Server fragt bist du es wirklich, Client antwortet nicht, Server sagt keine Zeit für Spässe.....:)
 
Zuletzt bearbeitet von einem Moderator:
Zurück