PDA

View Full Version : [PHP] il tempo va al contrario ???


Diavolo_Rosso
01-07-2005, 22:43
siccome avevo necessita di implementare in un pannello, la rilevazione del ping a un dato host ho usato questo semplice script

$f = microtime();
@$sock = fsockopen("www.google.com", 80, $errno, $errstr, 30);
$s = microtime();
$tot = ($s - $f)*1000;
$ping = explode(".", $tot);
echo "Ping: $ping[0] ms<br><br>";

e va anche bene.

solo che, ogni tanto, mi vengono visualizzati dei ping negativi :wtf: come è possibile che un microtime preso dopo sia minore di microtime preso prima? :mbe: :help:

Blackat
02-07-2005, 00:28
Indietro nel tempo ancora non si puo' tornare!!! :D ( anche se Einstein diceva che era possibile in qualche modo ).

Il problema sta nel modo in cui utilizzi la funzione microtime.
Cito dal manuale del php :

....
When called without the optional argument, this function returns the string "msec sec" where sec is the current time measured in the number of seconds since the Unix Epoch (0:00:00 January 1, 1970 GMT), and msec is the microseconds part. Both portions of the string are returned in units of seconds.
....

Quindi la funzione ti ritorna una stringa e non un numero! :rolleyes: Per questo a volte usciva un valore negativo. :sofico:
Per farsi ritornare un valore numerico, ricito il manuale del php :

When get_as_float is given, and evaluates to TRUE, microtime() will return a float.

ricordando che la sintassi di microtime è

mixed microtime ( [bool get_as_float] )


Allora il tuo codice si trasforma in

$f = microtime(true);
@$sock = fsockopen("www.google.com", 80, $errno, $errstr, 30);
$s = microtime(true);
$tot = ($s - $f)*1000;
$ping = explode(".", $tot);
echo "Ping: $ping[0] ms<br><br>";


Adesso dovrebbe funzionare!!! :cool:

Ciao ciao.

Diavolo_Rosso
02-07-2005, 02:10
Adesso dovrebbe funzionare!!! :cool:


appunto.....dovrebbe.....ma...... :cry:

stesso inconveniente di prima mi segnala un negativo di oltre 800ms mentre il reso delle volte si aggira tra i 50 e i 100 ms che poi sono gli stessi valori che ricevo usando il comando "ping" dal prompt dei comandi di win

Blackat
02-07-2005, 08:04
Troppo strano perchè a me funziona!!! :confused:

Ma tra i 50ms e 100ms sono valori positivi, giusto ?

A quanto ho capito l'unico valore negativo è quello iniziale a 800ms, giusto ?

Non so! A me funziona bene.

Caso mai, se non funziona il valore "true" come parametro di input della funzione microtime(), prova a utilizzare il seguente pezzo di codice che ho preso dal manuale del php

function microtime_float()
{
list($usec, $sec) = explode(" ", microtime());
return ((float)$usec + (float)$sec);
}

Sostituisci nel tuo codice la funzione microtime() con la funzione microtime_float() e facci sapere. :D

Diavolo_Rosso
02-07-2005, 13:34
dunque.....i valori tra 50 e i 100 sono positivi.

il -800 non è solo all'inizio. a volte capita a volte no.

ho provato ad usare la funzione microtime_float() e sembra funzionare a meraviglia.

mille grazie ;)