Esta é a página que fará o trabalho de enviar as informações, calcular a velocidade e apresentar o resultado na tela. Como já expliquei no início, o funcionamento e o código está comentado, não vou me prender muito a explicações aqui.
Arquivo: desempenho.php
<?
/*
TIPO DE LICENÇA: GNU/GPL
TESTE DE DESEMPENHO EM PHP
AUTOR: KEMPER ALVES DE CASTRO CARLOS <[email protected]>
*/
?>
<html>
<head>
<title>Teste de Desempenho</title>
</head>
<body style="margin-left:100px;margin-right:100px;margin-top:10px">
<div style="width:100%; border-style:solid; border-color:rgb(200,200,200); border-width:1px">
<h1 id=titulo>Teste de Desempenho</h1>
<p><b>Atenção:</b> Feche qualquer programa que esteja utilizando a conexão antes de iniciar o teste!</script>
<p id=aguarde style="text-align: center; color: blue; font-weight: bold">Aguarde enquanto o teste é efetuado!</p>
<div id=barraprogresso style="width:96%;left: 2%; position: relative; border-style:solid; border-color:rgb(200,200,200); border-width:1px; margin-bottom:3px">
<hr align=left style="width:0%; height:20px; border-style: none; background-color:blue;" id=barra>
</div>
<?
/*
Aqui definimos qual a quantidade de kbytes
será utilizada no teste,
Utilizo 256 porque é o que mais faz o resultado
se aproximar da verdade.
Valores muito altos consomem muita cpu, provocando
atraso no processamento e consequentemente, perda de precisão.
valores muito baixos a transferência ocorre muito rapidamente,
provocando também baixa precisão no resultado.
*/
$tamanho=256;
$tamanho=1024*$tamanho;
/*
Agora vamos gerar uma string com a quantidade de dados necessário.
Note que a string é aleatória para evitar que o browser do
usuário armazene no cache.
Veja também que a cada 256 bytes é escrito o código que atualiza
a barra de progresso, e, logicamente, a quantidade de bytes
utilizado por esse código é descontado, pois ele vai junto da
string de 256K, assim continuamos enviando dados e atualizamos a barra
de progresso ao mesmo tempo :)
*/
for ($i=0; $i<$tamanho; $i++){
if ($i % 256 == 0){
$addstr="--> <script>";
$addstr.="document.getElementById(\"barra\").style.width=\"".number_format(100/$tamanho*$i,0)."\%\";";
$addstr.="</script><!-- ";
$i+=strlen($addstr); //é a quantidade de caracteres gastos para atualizar a barra
$str.=$addstr;
}else{
//Gera uma string aleatória, para evitar cache dos navegadores
$str.=chr(rand(97, 97+20));
}
}
?>
<?
/*
O script abaixo exibe a frase "aguarde o fim do teste!"
e armazena o momento exato do início do teste...
*/
?>
<script>
document.getElementById("aguarde").innerHTML="Aguarde o fim do teste!";
time=new Date();
starttime=time.getTime();
</script>
<?
/*
AGORA É TRANSFERIDA A STRING GERADA PARA O BROWSER DO USUÁRIO,
LEMBRE-SE, ELA POSSUI 256 KBYTES E ESTÁ INCLUÍDO O CÓDIGO
JAVASCRIPT PARA ATUALIZAR A BARRA DE PROGRESSO.
*/
?>
<!-- <? echo $str ?> -->
<?
/*
PRONTO! TRANSFERÊNCIA CONCLUÍDA!
AGORA ARMAZENA A HORA QUE CONCLUIU, CALCULA A TAXA DE
TRANSFERÊNCIA E CHAMA O SCRIPT:
grafico_desempenho.php
PARA GERAR O RESULTADO...
*/
?>
<script>
time = new Date();
endtime = time.getTime();
if (endtime == starttime) {
downloadtime = 0;
} else {
downloadtime = (endtime - starttime);
}
kbits = <?echo $tamanho?>*8;
kbitssegundo = kbits/downloadtime;
document.getElementById("aguarde").innerHTML="<a href=desempenho.php>Obtendo o Gráfico</a>";
document.getElementById("titulo").innerHTML="Teste de Desempenho Concluído";
document.getElementById("barraprogresso").innerHTML="";
document.getElementById("barraprogresso").style.borderStyle="none";
//AQUI É DESENHADO O GRÁFICO DA VELOCIDADE...
document.write("<p align=center><img align=center src=grafico_desempenho.php?velocidade="+kbitssegundo+"></p>");
document.getElementById("aguarde").innerHTML="<a href=desempenho.php>Testar Novamente</a>";
</script>
</div>
</body>
</html>