Es gibt einige Methoden zu prüfen, ob eine Website existiert bzw. erreichbar ist. Manche Methoden laufen schnell, manche langsamer. Die drei beliebtesten Methoden sind unter http://neo22s.com/check-if-url-exists-and-is-online-php/ (offline) gegenüber gestellt, samt Ausführungszeiten. Eine Methode möchte ich im Folgenden näher erklären: Die cURL-Methode.
Hinweis: Dieses Script unterscheidet nicht zwischen "Website existiert nicht" und "Website ist nicht erreichbar". Hierfür wäre eine Abfrage einer Whois-Datenbank notwendig (soweit ich weiß 😉)
Werbeblocker aktiv?
Vermutlich aufgrund eines Werbeblockers kann an dieser Stelle leider keine Werbung angezeigt werden. Als Blog ist diese Website jedoch darauf angewiesen, um diverse Kosten abdecken zu können. Vielleicht möchtest du Servaholics ja in deinem Werbeblocker als Ausnahme hinzufügen und so unterstützen? 🙂
<?php
function isWebsiteOnline($url) {
// Prueft, ob $url eine richtige URL ist; Funktion erst seit PHP 5.2.0 Standard, ggf. entfernen
if (!filter_var($url, FILTER_VALIDATE_URL)) {
return false;
}
// Sofern Benutzer und/oder Script keinen User Agent String haben, lassen manche Webseiten die folgenden Verbindung und damit die Abfrage nicht zu.
// Deshalb wird in diesem Beispiel ein standardisierter User Agent String gesetzt.
// Hier koennte auch ein eigener User Agent String verwendet werden, z.B. der eines eigenen Bots, aehnlich wie Google und sein Googlebot.
// Beispiel: Firefox 3.6.13 auf Windows XP
$agent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13";
$ch = curl_init(); // Startet eine cURL-Session
if (!$ch) { die("Konnte keine cURL-Session starten. Ist auf deinem Server cURL installiert/aktiviert?"); } // falls die cURL-Session nicht gestartet werden konnte
// curl_setopt setzt im Folgenden mehrere Optionen für den cURL-Transfer
curl_setopt ($ch, CURLOPT_URL, $url ); // die aufzurufende URL
curl_setopt ($ch, CURLOPT_USERAGENT, $agent); // der zu benutzende User Agent, Erklaerung oben
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true); // gibt den Transfer als String zurueck, gibt ihn somit nicht direkt aus
curl_setopt ($ch, CURLOPT_VERBOSE, false); // verhindert, dass ausfuehrliche Informationen ausgegeben werden; uns reicht der HTTP-Statuscode
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, 5); // Script hat 5 Sekunden Zeit, die Verbindung aufzubauen
curl_setopt ($ch, CURLOPT_TIMEOUT, 5); // Script hat 5 Sekunden Zeit um alle Aufgaben auszufuehren
curl_exec($ch); // Fuehrt die cURL-Session aus
$info = curl_getinfo($ch); // Holt sich Informationen des Transfers
$http_statuscode = $info['http_code']; // Waehlt den zuletzt empfangenen HTTP-Statuscode und speichert ihn
curl_close($ch); // Beendet die cURL-Session
if ($http_statuscode >= 200 AND $http_statuscode < 400) { // ggf. kann man die Grenze auch auf < 300 setzen, sofern Weiterleitung als "offline" gelten
return true;
} else {
return false;
}
}
if (isWebsiteOnline("https://www.google.de")) { // Hier URL anpassen
echo "Google ist erreichbar";
} else {
echo "Google ist nicht erreichbar.";
}
?>