Hallo an alle,
denkt bitte nicht: "Schon wieder eine fsockopen-, http_Request-Frage."
Ich habe ein Problem, das in keinem der Posts, die ich zu diesem Thema hier gefunden habe, thematisiert, bzw. angesprochen wurde:
Mein Ziel: Ich möchte ein Script schreiben, dass Domains aus einer Datenbank liest und den Stutus (zB. 200, 302, 404 etc.) zurückgibt.
Ich bin, dank diesem Forum, auf fsockopen(), http_request von pear und curl gestoßen.
curl scheidet leider aus, da es nicht zur Verfügung steht.
Ich habe mich für fsockopen und/oder http_request entschieden.
fsockopen gibt zwar keinen Fehlercode (200, 404 etc.) zurück, aber immerhin kann ich damit herausfinden, ob eine domain erreichbar ist.
Nun endlich zum eigentlichen Problem: Die Scripte, die ich mit fsockopen und http_request geschrieben habe funtionieren soweit ganz gut, nur bei Domains folgenden Typs nicht:
- http://www.ein-beispiel.de // Domain mit "-"
- http://www.beispiel.de.tp // "erweiterte" Topleveldomain
- bei Domains mit Umlauten
Okay bei Domains mit Umlauten kann ich es vielleicht akzeptieren, dass es hier keine Lösung/Möglichkeit gibt, da ein sehr spezielles Problem von Deutschland und kein globales.
In den ersten beiden Fällen bin ich der Meinung, dass es funktioneren sollte. Ich habe testweise verschiedene der Problemdomains getestet und das Ergebniss war immer das selbe. Natürlich habe ich die Domains auch manuell (sprich im Browser) überprüft, hätte ja sein können, dass sie wirklich nicht erreichbar sind, jedoch war das nicht der Fall.
Jetzt habe ich mir überlegt, dass vielleicht Proxyserver oder Firewalls Einfluß nehmen könnten. Habe die Scripte zu Hause mal getestet, dort war das Ergebniss jedoch das selbe.
Hier ist mal der Code der Funktionen, die ich geschrieben habe.
Mit fsockopen():
Bei den Problemdomains kann kein socket geöffnet werden, der else-Fall tritt nicht ein.
Mit pear - http_Request:
In diesem Fall lasse ich mir nur den http-Status ausgeben, alles weitere ist dann ja kein Problem mehr.
Eine weitere Methode den Statuscode zu bekommen ist auch:
Mit pear - HTTP_Client::Head()
Das Ergebnis bei Problemdomains ist:
Habt ihr vielleicht Ideen, woran es liegen könnte, oder hattet ihr das Problem auch schon und kennt eine Lösung?
Danke für eure Antworten.
denkt bitte nicht: "Schon wieder eine fsockopen-, http_Request-Frage."
Ich habe ein Problem, das in keinem der Posts, die ich zu diesem Thema hier gefunden habe, thematisiert, bzw. angesprochen wurde:
Mein Ziel: Ich möchte ein Script schreiben, dass Domains aus einer Datenbank liest und den Stutus (zB. 200, 302, 404 etc.) zurückgibt.
Ich bin, dank diesem Forum, auf fsockopen(), http_request von pear und curl gestoßen.
curl scheidet leider aus, da es nicht zur Verfügung steht.
Ich habe mich für fsockopen und/oder http_request entschieden.
fsockopen gibt zwar keinen Fehlercode (200, 404 etc.) zurück, aber immerhin kann ich damit herausfinden, ob eine domain erreichbar ist.
Nun endlich zum eigentlichen Problem: Die Scripte, die ich mit fsockopen und http_request geschrieben habe funtionieren soweit ganz gut, nur bei Domains folgenden Typs nicht:
- http://www.ein-beispiel.de // Domain mit "-"
- http://www.beispiel.de.tp // "erweiterte" Topleveldomain
- bei Domains mit Umlauten
Okay bei Domains mit Umlauten kann ich es vielleicht akzeptieren, dass es hier keine Lösung/Möglichkeit gibt, da ein sehr spezielles Problem von Deutschland und kein globales.
In den ersten beiden Fällen bin ich der Meinung, dass es funktioneren sollte. Ich habe testweise verschiedene der Problemdomains getestet und das Ergebniss war immer das selbe. Natürlich habe ich die Domains auch manuell (sprich im Browser) überprüft, hätte ja sein können, dass sie wirklich nicht erreichbar sind, jedoch war das nicht der Fall.
Jetzt habe ich mir überlegt, dass vielleicht Proxyserver oder Firewalls Einfluß nehmen könnten. Habe die Scripte zu Hause mal getestet, dort war das Ergebniss jedoch das selbe.
Hier ist mal der Code der Funktionen, die ich geschrieben habe.
Mit fsockopen():
PHP-Code:
function check_domain($domain)
{
$check = @fsockopen($domain, 80, &$errno, &$errstr, 15);
if(!$check)
{
/* Aktualisierung in der DB */
/* Benachrichtigung der Admins */
return;
}
else
{
/* Aktualisierung in der DB */
return;
}
}
Mit pear - http_Request:
PHP-Code:
function check_domain($domain)
{
require_once ('includes/pear/HTTP/Request.php');
$check =& new HTTP_Request("");
$domain .= "/";
$check->setURL($domain);
$check->sendRequest();
$code = $check->getResponseCode();
echo "Code: ".$code;
}
Eine weitere Methode den Statuscode zu bekommen ist auch:
Mit pear - HTTP_Client::Head()
PHP-Code:
function check_domain($url)
{
require_once ('includes/pear/HTTP/Client.php');
$check = new HTTP_Client("");
$code = $check->head($url);
echo "Code: ".$code;
}
Code:
Code: Object id #7
Danke für eure Antworten.

Kommentar