php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2006

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 28.08.2006, 10:34  
Neuer Benutzer
 
Registriert seit: 21.07.2005
Beiträge: 7
dragon1402
Standard fsockopen() - Problemdomains

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():
PHP-Code:
function check_domain($domain)
{
    
$check = @fsockopen($domain80, &$errno, &$errstr15);
    if(!
$check
    {
        
/* Aktualisierung in der DB */
        /* Benachrichtigung der Admins */
        
return;
    }
    else 
    {
        
/* Aktualisierung in der DB */
        
return;            
    }

Bei den Problemdomains kann kein socket geöffnet werden, der else-Fall tritt nicht ein.

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;

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()
PHP-Code:
function check_domain($url)
{
      require_once (
'includes/pear/HTTP/Client.php');
      
$check = new HTTP_Client("");
      
$code $check->head($url);
      echo 
"Code: ".$code;

Das Ergebnis bei Problemdomains ist:
Code:
Code: Object id #7
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.
dragon1402 ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 28.08.2006, 10:59  
XLB
Erfahrener Benutzer
 
Registriert seit: 31.07.2005
Beiträge: 1.126
PHP-Kenntnisse:
Fortgeschritten
XLB
Standard

Hi.

Habe mal mit phpLinkCheck() rumgespielt. Könnte auch was für dich sein ...?
XLB ist offline  
Alt 28.08.2006, 11:52  
Neuer Benutzer
 
Registriert seit: 21.07.2005
Beiträge: 7
dragon1402
Standard

Danke für die Antwort.

Habe dein Script mit ein paar Problemdomains getestet, es gab leider das selbe Ergebnis wie bei meinen Scripts.
Es scheint, als könnte keine Socketverbindung bei einer Problemdomain geöffnet werden. Somit wird false zurückgeliefert bzw. der Timeout schlägt zu. Ich habe den Timeout mal hochgesetzt, aber das ändert auch nichts.
dragon1402 ist offline  
Alt 28.08.2006, 14:33  
XLB
Erfahrener Benutzer
 
Registriert seit: 31.07.2005
Beiträge: 1.126
PHP-Kenntnisse:
Fortgeschritten
XLB
Standard

Ich nochma ...

Habe das von mir verlinkte Skript auch mal (lokal) mit "Problemdomains" getestet. Einige liefen problemlos durch, andere wiederum nicht ...?!

Könntest du "deine" getesteten Domains mal posten ...?
XLB ist offline  
Alt 28.08.2006, 15:00  
Neuer Benutzer
 
Registriert seit: 21.07.2005
Beiträge: 7
dragon1402
Standard

Hier meine Testseiten:
- http://www.karate-seeheim.de
- http://www.boese-online.de
- http://www.bbc.co.uk
- http://www.börse-online.de/

Das Ergebnis bei allen Testdomains ist:
Code:
fsockopen() [function.fsockopen]: unable to connect to www.boerse-online.de:80 (A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond.)
Ich habe auch den Timeout mal auf 60 gesetzt. Das ändert jedoch nichts.

Gerade ist mir auch aufgefallen, dass das Script bei "normalen" Websites, wie zB. http://www.google.de nicht funktioniert.
Kann es sein, dass der Socketzugriff von den entsprechenden Domains aus Sicherheitsgründen geblockt wird?
dragon1402 ist offline  
Alt 28.08.2006, 15:05  
Erfahrener Benutzer
 
Registriert seit: 17.07.2006
Beiträge: 140
louis
Standard

Hi,

Mir scheint das eher ein Namensauflösungsproblem zu sein...vielleicht tut sich der Resolver auf deinem Server mit speziellen Zeichen ein bisschen schwer.
Um das ausschliessen zu können kannst du dir ja mal per nslookup die IP's zu dein Domains holen und dann mit der IP testen.

Zitat:
Zitat von dragon1402
Kann es sein, dass der Socketzugriff von den entsprechenden Domains aus Sicherheitsgründen geblockt wird?
Meiner Ansicht nach ist ein fsockopen auf Port 80 nichts anderes als ein HTTP-Zugriff. Also sollte da nix geblockt werden.

mfg Louis
louis ist offline  
Alt 29.08.2006, 08:59  
Neuer Benutzer
 
Registriert seit: 21.07.2005
Beiträge: 7
dragon1402
Standard

Zitat:
Zitat von luis
Meiner Ansicht nach ist ein fsockopen auf Port 80 nichts anderes als ein HTTP-Zugriff. Also sollte da nix geblockt werden.
Irgendwie einleuchtend :wink:
Ich habe deine Idee mal ausprobiert, sowohl mit nslookup, als auch mit diesem kleinen Script:
PHP-Code:
<?php
    error_reporting
(E_ALL);
    
$domain "www.boerse-online.de";
    
$ip gethostbyname($domain);
    echo 
$domain" -> " .$ip;
    
$check_ip "http://".$ip;
    require_once (
'../includes/pear/HTTP/Client.php');
    
$check = new HTTP_Client("");
    
$code $check->head($check_ip);
    echo 
"
Code: "
.$code;
?>
Ergebnis bei www.boerse-online.de:
Code:
www.boerse-online.de -> 194.12.210.209
Code: Object id #6
So wie ich das nur sehe, spreche ich mit der IP-Adresse einen ganz bestimmten Webserver an und nicht eine bestimmte Website, die auf dem Webserver gehostet ist.

Eine andere Idee, zu der ich gerne mal eure Meinung hören würde, ist:
Wenn ein fsockopen() auf Port 80 einem ganz normalen HTTP-Zugriff entspricht - was ja auch sehr einleuchtend ist - dann könnte es doch sein, dass bei meinem Problem ein Proxyserver seine Finger mit im Spiel hat.
Immerhin fungiert ein HTTP-Proxy als Zwischenspeicher und unternaderem noch als Trennung zwischen lokalem Netz und Internet.
Was außerdem für diese These spricht, ist, dass auch www.google.de entsprechend das oben stehende Ergebnis ausgibt, die firmeninternen Webserver jedoch positiv auf den Request antworten.
Was denkt ihr?
dragon1402 ist offline  
Alt 29.08.2006, 11:51  
Erfahrener Benutzer
 
Registriert seit: 13.11.2005
Beiträge: 2.583
xabbuh
Standard

Zitat:
Zitat von dragon1402
So wie ich das nur sehe, spreche ich mit der IP-Adresse einen ganz bestimmten Webserver an und nicht eine bestimmte Website, die auf dem Webserver gehostet ist.
Auf einem Webserver können mehre Websites unter der gleichen IP gehostet werden. Dieses Vorgehen nennt sich "namensbasierte virtuelle Hosts". Der Webserver wertet dabei den Host-Header in der Anfrage des Clients aus und liefert dann Daten aus dem entsprechenden virtuellen Host.
xabbuh ist offline  
Alt 30.08.2006, 11:08  
Neuer Benutzer
 
Registriert seit: 21.07.2005
Beiträge: 7
dragon1402
Standard

Vielleicht hätte ich erwähnen sollen, dass ich XAMPP verwende und meine Scripte local entwickle. Ich habe die Scripte jetzt mal auf einem anderen Webserver getestet (nicht XAMPP) und da funktioniert es top.

Um mit voller Funktion weiterhin local zu entwickeln, wäre es toll, wenn es auch von meinem lokalen Apache funktionieren würde.
Seht ihr da eine Möglichkeit, muss ich vielleicht meinen Apache anders kunfigurieren?
dragon1402 ist offline  
Alt 30.08.2006, 11:57  
Erfahrener Benutzer
 
Registriert seit: 17.07.2006
Beiträge: 140
louis
Standard

Zitat:
Zitat von dragon1402
Vielleicht hätte ich erwähnen sollen, dass ich XAMPP verwende und meine Scripte local entwickle. Ich habe die Scripte jetzt mal auf einem anderen Webserver getestet (nicht XAMPP) und da funktioniert es top.
Ja das hättest du erwähnen können.

Zitat:
Zitat von dragon1402
Um mit voller Funktion weiterhin local zu entwickeln, wäre es toll, wenn es auch von meinem lokalen Apache funktionieren würde.
Seht ihr da eine Möglichkeit, muss ich vielleicht meinen Apache anders kunfigurieren?
Was heisst "lokal"? Ist da ein Router dazwischen oder wie? Ist der Server von aussen erreichbar? Beschreib mal deine "lokale" Netzwerktopologie!
louis ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Frage zu fsockopen() Pennywise PHP Tipps 2008 2 27.07.2008 14:50
fsockopen - timeserver chinchiller PHP Tipps 2008 8 07.06.2008 11:15
fsockopen PHP Tipps 2006 12 13.11.2006 21:12
fsockopen: broadcast nicht erlaubt (WOL) HStev PHP-Fortgeschrittene 0 07.02.2006 20:18
fsockopen() Problem - weis nicht mehr weiter :( web2 PHP Tipps 2005-2 22 21.10.2005 15:31
fsockopen problem PHP Tipps 2005 4 09.05.2005 01:03
php fsockopen fgets response check: 404 und 403 warum? ff-webdesigner.de PHP Tipps 2005 4 17.04.2005 14:06
[Erledigt] fsockopen über socks proxy PHP-Fortgeschrittene 1 17.03.2005 09:38
fsockopen - Fehlermeldung ausschalten PHP-Fortgeschrittene 2 09.11.2004 20:12
fsockopen, verbindung ins netzwerk? PHP-Fortgeschrittene 5 30.10.2004 12:42
Probleme mit fsockopen() PHP Tipps 2004 5 22.10.2004 13:55
fsockopen funktioniert nicht PHP Tipps 2004 13 19.10.2004 12:25
fsockopen: while(!feof($fp)) dauert bei manchen Servern 15 s tapferesschneiderlein PHP-Fortgeschrittene 7 13.09.2004 18:47
Was bedeutet mit fsockopen: Resource id #2 PHP Tipps 2004 3 13.09.2004 17:26
fsockopen PHP Tipps 2004 2 22.06.2004 14:46

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
xampp fsockopen, fsockopen xampp, fsock-domain, fsockopen 302, fsockopen() xampp, fsock domain, xampp fsock, xampp fsockopen aktivieren, fsockopen umlaute, socketzugriffe, xampp fsockopen(), socks proxys domains checken, fsockopen, xampp fsockopen port 80, php fscockopen mit bestimmter ip, http://www.php.de/php-tipps-2006/41869-fsockopen-problemdomains.html, socketzugriff, fsocket bei xampp, wie kann ich testen ob fsocket bei meinen hoster offen ist, fsockopen und pfsockopen das gleichr?

Alle Zeitangaben in WEZ +2. Es ist jetzt 12:37 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.