Lepší je toto řešení, ale může být nepřesné, protože každý prohlížeč zpracovává příchozí data jinak (nastavení bufferu pro flush je pokaždé jiné). Také záleží na vytížení odchozí linky serveru a serveru samotného (což ale nebude takový problém u měřených linek do řekněme 50MBit/s). Soubor index.php spustí test a soubor rychlost.php zobrazí výsledek. Ve výsledku je flash graf, ale ten samozřejmě být nemusí. V příloze posílám všechny soubory testu. Měří se pouze rychlost downloadu.
Princip je takový, že se nejprve změří krátkým testem základní schopnost linky. Podle toho se nastaví hlavní test (velikost stahovaných dat). Zaznamená se čas startu a pošlou se data ke klientovi. Po dokončení posílání se zaznamená čas odeslání. Rozdíl v čase se spočítá s velikostí dat a zobrazí se rychlost downloadu.
Vyzkoušet si to můžete na stránce http://rychlost.mysoft.cz
soubor: index.php
Kód:
<font face="verdana" color="navy"><?php
$kb=rand(2048,5120);
echo "streaming $kb kB...<br><!-";
flush();
$time = explode(" ",microtime());
$start = $time[0] + $time[1];
for($x=0;$x<$kb;$x++){
echo str_pad('', 1024, '.');
flush();
}
$time = explode(" ",microtime());
$finish = $time[0] + $time[1];
$deltat = $finish - $start;
echo "-> Test finished in $deltat seconds. Your speed is ". round($kb / $deltat, 3)."kB/s<br>";
$vysledek=round($kb / $deltat, 3);
// hlavní kolo
$kb=25*$vysledek;
if ($kb>50000):$kb=50000; endif;
echo "streaming $kb kB...<br><!-";
flush();
$time = explode(" ",microtime());
$start = $time[0] + $time[1];
for($x=0;$x<$kb;$x++){
echo str_pad('', 1024, '.');
flush();
}
$time = explode(" ",microtime());
$finish = $time[0] + $time[1];
$deltat = $finish - $start;
$vysledek=round($kb / $deltat, 3);
$vysledek=$vysledek*8; // převod z kB na kb
echo "-> Test finished in $deltat seconds. Your speed is ". round($kb / $deltat, 3)."kB/s<br>";
echo "Speed is <font size=5 color=green><b>$vysledek kbps</b></font><br>";
include "./rychlost.php";
?></font>
soubor rychlost.php
Kód:
<!--[if !IE]> -->
<br>WWW Prohlížeč: jiný, než IE.<br>
<object type="application/x-shockwave-flash" data="./tachak.swf?vysledek=<? echo $vysledek;?>" width="400" height="400">
<!-- <![endif]-->
<!--[if IE]>
<br>WWW prohlížeč: Internet Explorer.<br>
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0"
width="400" height="400">
<param name="movie" value="./tachak.swf?vysledek=<? echo $vysledek;?>" />
<!--><!---->
<param name="loop" value="false" />
<param name="menu" value="false" />
<param name="wmode" value="transparent" />
<param name="bgcolor" value="#ffffff">
</object>
<!-- <![endif]-->