Serwer to ja mam dedykowany.
ok . udało mi się.
Muszę jeszcze za pomocą preg_match_all wyłuskać ten czas ze zmiennej $odpowiedz. Nie wiem czemu ale jak mierzę czas w microtime() to jest 507 ms podczas gdy sam ping odpowiada w 37 ms - takie dane są w zmiennej odpowiedź w stringu , który zwraca.
Znowu jak zmieniam wywołanie z fping na ping to czas mierzy się poprawnie obydwoma metodami. - różnice nie są już tak duże - rzędu 0.1 ms.
Do mierzenia używam :
list($usec, $sec) = explode(" ",microtime());
$getmicrotime = ((float)$usec + (float)$sec);
$start = $getmicrotime;
list($usec, $sec) = explode(" ",microtime());
$getmicrotime2 = ((float)$usec + (float)$sec);
$stop = $getmicrotime;
potem tylko wystarczy odjąć czas $stop - $start i wynik gotowy.
Przeliczam to potem jeszcze na ms.
Ciekawi mnie skąd jest taka różnica w odchyleniach czasowych.
Dobra skończyłem pisać.
function ping($host , $obr)
{
for ( $ob = 0; $ob < $obr; $ob ++ )
{
$str=exec("/usr/sbin/fping -c 1 -i 100 ".$host); //$odpowiedz .= 'STR to '.$str.'<br><br>';
$kod = '/[0-9\.]{1,5}\s{1}ms/';
$il = strlen($rezultat[0
][0
]); $czas = substr($rezultat[0
][0
],0
,$li - 3
);
$odpowiedz .= 'Odpowiedź w czasie '.$czas.' ms dla adresu '.$host.'<br>';
}
else
{
$odpowiedz .= "Upłynął limit czasu żądania dla adresu ".$host."<br>'";
}
}
return ($odpowiedz);
}
$ping = ping($host , 1); // Pod zmienną host wpisujemy IP serwera. Druga to ilość odpytywań
Skryptem tym można w miarę szybko odpytać kilkadziesiąt serwerów.
Ja np. odpytuję serwery, które mam w bazie danych i nadaje im statusy aktywny - nie aktywny.
Dzięki temu inne funkcje , które korzystają z serwera np. proxy mogą raz dwa dogadać się z serwerem.
Dla mnie to tylko pierwszy etap sprawdzania czy dany serwer jest aktywny.
Następnym etapem jest sprawdzenie czy serwer świadczy usługę proxy na porcie, który mam zapisany w bazie. Ja używam do tego Curl.