Prüfen ob eine URL online oder offline ist

212N3rD

Cadet 4th Year
Registriert
Juli 2008
Beiträge
70
script zeigt immer "OFFLINE" an!
warum?

Code:
<?php
$superarray=array('http://www.google.de/','http://apple.com/');

for($i=0; $i < count($superarray); $i++)
   {
echo   $url=$superarray[$i]."<br>";

    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_NOBODY, true);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_exec($ch);
    $retcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);
    if ($retcode==200) {
        echo"ONLINE<br>";
    } else {
        echo "OFFLINE<br>";
    }
};

?>
 
Wenn ich raten müsste:
curl_getinfo gibt wohl nicht 200 zurück, sondern "OK".
 
Was kommt denn als Statuscode zurück? Ich erinnere mich vage daran, dass für einen rekursiven CURL-Aufruf (mit Redirect) eine eigene Funktion von Nöten war. Kann aber auch nur in Verbindung mit POST-Daten gewesen sein, bin ich mir grad nicht sicher.
 
Du hast zwei Fehler in deinem Skript:

1.) Die Zeile echo $url=$superarray[$i]."<br>"; ist fehlerhaft, weil in der Variable $url dann der Inhalt "http://www.google.de/<br>" enthalten ist und dies kein gültiger Link ist. Deswegen wirst du, auch wenn die Webseite eigentlich erreichbar ist, niemals einen HTTP-Code von 200 erhalten können.

2.) Darüber hinaus prüft das Script ja nicht wirklich, ob eine Seite erreichbar ist oder nicht. ONLINE wird ja nur dann ausgegeben, wenn der Server mit dem korrekten HTTP-Code von 200 geantwortet hat. Selbst wenn du den Fehler in 1.) löst, wird das für die Apple-Webseite nicht funktionieren, weil dessen Server wie folgt antwortet:

Code:
HTTP/1.1 301 MOVED PERMANENTLY
Location: http://www.apple.com/
Connection: close
 
wenn ich die url adresse direkt in eine variable reinschreibe funktioniert es wie es soll.
mit dem array klappt das nicht ????

Code:
$url='http://www.google.de/';
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_NOBODY, true);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_exec($ch);
    $retcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);
    if ($retcode==200) {
        echo"ONLINE<br>";
    } else {
        echo "OFFLINE<br>";
    }
Ergänzung ()

@dreamy_betty
1) richtig das <br> tag war schuld!
2) das waren nur beispiele :)
 
Zuletzt bearbeitet:
Zurück
Oben