Prüfen ob eine URL online oder offline ist

212N3rD

Cadet 4th Year
Dabei seit
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>";
    }
};

?>
 

Daaron

Fleet Admiral
Dabei seit
Dez. 2011
Beiträge
13.487
Wenn ich raten müsste:
curl_getinfo gibt wohl nicht 200 zurück, sondern "OK".
 

Yuuri

Fleet Admiral
Dabei seit
Okt. 2010
Beiträge
12.596
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.
 

dreamy_betty

Lt. Commander
Dabei seit
Juni 2006
Beiträge
1.129
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
 

212N3rD

Cadet 4th Year
Ersteller dieses Themas
Dabei seit
Juli 2008
Beiträge
70
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:
Top