phpbar.de logo

Mailinglisten-Archive

[php] Link-Verfügbarkeit

[php] Link-Verfügbarkeit

Sebastian Mendel lists at sebastianmendel.de
Fre Aug 20 10:46:37 CEST 2004


Norbert Pfeiffer schrieb:

> Hi oooops,
> 
> wer lesen kann ist klar im Vorteil, obwohl, lesen koennen
> allein reicht nicht, man muss auch lesen wollen ...

ich kann/will lesen, es ging um eine existenten DNS-Eintrag, und nicht 
um einen unbekannten wo man noch nicht mal weis ob der Host überhaupt 
existiert!


> zu Deinem Code - die Ausgabe ist:
> <copy>
> 0.01 : failure in 20.7166 seconds
> (0 : Der Vorgang wurde ausgeführt.
> )
> </copy>
> also klarer Fall von Script-Timeout, das Socket-Timeout
> kommt gar nicht erst zum tragen, weil der DNS-Lookup bereits
> fehlschlaegt, wenn man eine DNS-lose Domain abfragt
> (z.B. 'www.qawsedrf.de') und genau das habe ich behauptet.

du hast behauptet:

> der Irrglaube, dass das Argument Timeout in fsockopen();
> irgendwie fur den Coder nutzbar ist haelt sich wacker.
> 
> Habe viel getestet, aber wozu dieser Parameter gut ist,
> blieb mir bislang verschlossen ...  :-( 

und diese Aussage ist nunmal schlichteweg falsch (abgesehen von dem dir 
verschlossen bleiben), soweit ich mich dunkel errinnere hatten wir so 
eine Diskussion schonmal auf der Liste, und damals klang auch heraus das 
man natürlich vorher die Domain auf existenz überprüfen sollte ...


> ooops ... ;-)

tsss, is ja wohl nicht Aufgabe von fsockopen zu überprüfen ob der Host 
überhaupt existiert!

das sollte man natürlich vorher machen, das Timeout bezieht sich auf das 
öffnen des sockets, nicht auf die Namensauflösung, wenn die natürlich 
schon nicht klappt ... und die 20 sekunden sind die Zeit die dein System 
braucht um zu erkennen das es www.qawsedrf.de nicht gibt ... übrigens 
eine enorm lange Zeit! ... bei mir sind das nur 2 Sekunden (bei 
fsockopen auf nicht existenten dns-record)


<?php
$errno = 0;
$errstr = '';

$timeouts[] = 0.01;
$timeouts[] = 0.1;
$timeouts[] = 1;

$hosts[] = 'www.hfdhfdhfgh.de';
$hosts[] = 'www.golem.de';
$hosts[] = 'unbekannt.golem.de';

foreach ( $hosts as $host )
{
     foreach ( $timeouts as $timeout )
     {
         $time = array_sum( explode( ' ', microtime() ) );

         if ( gethostbyname( $host ) === $host )
         {
             $time = array_sum( explode( ' ', microtime() ) ) - $time;
             echo $host . ': DNS-Error in ' . number_format($time, 4) . 
" seconds<br />\n";
         }
         elseif ( @fsockopen ( $host, 80, $errno, $errstr, $timeout ) )
         {
             $time = array_sum( explode( ' ', microtime() ) ) - $time;
             echo $host . ': ' . $timeout . ' : success in ' . 
number_format($time, 4) . " seconds<br />\n";
         }
         else
         {
             $time = array_sum( explode( ' ', microtime() ) ) - $time;
             echo $host . ': ' . $timeout . ' : failure in ' . 
number_format($time, 4) . " seconds <br />\n";
             echo '(' . $errno . ' : ' . $errstr . ")<br />\n";
         }
     }
}
?>


meine Ausgabe dazu:

www.hfdhfdhfgh.de: DNS-Error in 0.0029 seconds
www.hfdhfdhfgh.de: DNS-Error in 0.0047 seconds
www.hfdhfdhfgh.de: DNS-Error in 0.0027 seconds
www.hfdhfdhfgh.de: DNS-Error in 0.0028 seconds
www.golem.de: 0.01 : failure in 0.0019 seconds
(10060 : Ein Verbindungsversuch ist fehlgeschlagen, da ... )
www.golem.de: 0.1 : success in 0.0999 seconds
www.golem.de: 1 : success in 0.1108 seconds
www.golem.de: 2 : success in 0.1157 seconds
unbekannt.golem.de: DNS-Error in 0.0044 seconds
unbekannt.golem.de: DNS-Error in 0.0027 seconds
unbekannt.golem.de: DNS-Error in 0.0044 seconds
unbekannt.golem.de: DNS-Error in 0.0029 seconds

-- 
Sebastian Mendel

www.sebastianmendel.de www.warzonez.de www.tekkno4u.de www.nofetish.com
www.sf.net/projects/phpdatetime        www.sf.net/projects/phptimesheet

php::bar PHP Wiki   -   Listenarchive