Teste de velocidade de conexão à Internet
Como obter um reflexo aproximado da conexão à internet, medida em Kbps.Por Emmanuel García De Caro
Publicado em: 12/6/06
Estudando rapidamente os sistemas que obtém um reflexo aproximado da conexão à Internet, medida em Kbps; resolvi realizar algo similar em Php.
Qual é a utilidade?
Pode-se determinar em quanto tempo aproximado se baixa um arquivo da Internet.
Por exemplo, se estivermos elaborando uma página de downloads e quisermos mostrar ao usuário em quanto tempo APROX, estará esse arquivo em seu PC.
Na verdade é algo extremamente simples, já veremos mais adiante porquê.
Teoria Básica
É importante ressaltar que um caractere QUALQUER sempre terá um tamanho de 1 Byte, ou seja, 8 impulsos eletrônicos (8 Bit) , pelo qual uma cadeia de texto que contenha mil e vinte e quatro caracteres no total, terá uma dimensão de 1024 Bytes o que seria igual a 1 KB.
1 KB é igual a 1024 Bytes
1 MB é igual a 1024 KB
1 GB é igual a 1024 MB
1 TB é igual a 1024 GB
O código fonte:
arquivo : test.php
<?
set_time_limit(0);
$tempo_micro[1]= microtime();
$q_espacos = explode(" ",$tempo_micro[1]);
$tempo_[1]= $q_espacos[1]+$q_espacos[0];
$conteudo=file_get_contents('http://localhost/carregar_bytes.php'); /* mudar por path real (URL) http://seudominio/carregar_bytes.php)*/
$tamanho_KB= strlen($conteudo)/1024;
$tempo_micro[2] = microtime();
$q_espacos= explode(" ",$tempo_micro[2]);
$tempo_[2] =$q_espacos[1] + $q_espacos[0];
$tempo_utilizado = number_format(($tempo_[2] - $tempo_[1]),3, "." ,",");
$velocidade= round($tamanho_KB/$tempo_utilizado,2);
echo 'Sua velocidade de conexão é de: '.$velocidade.' Kbps <br> Foram enviados:'.$tamanho_KB.
' Kb, Tempo utilizado: '.$tempo_utilizado.' Segundos <hr>';
for ($i=10; $i>=1; $i--){
$val_Kb=$i*100;
if($velocidade>=800)$velocidade_=800;
else $velocidade_=$velocidade/2;
if($velocidade>=$val_Kb && !$col){
echo '<div style="background-color:#F0F0F0; width:500px; float:left"><img width="'.($velocidade_).'" height="8" style="background-color: #FF0000" border="0"></div><strong>Sua conexão</strong><br>';
$col=true;
}
echo '<div style="background-color:#F0F0F0; width:500px; float:left"><img width="'.($val_Kb/2).'" height="8" style="background-color: #000099" border="0"></div>'.$val_Kb.' Kbps<br>';
}
?>
arquivo : carregar_bytes.php
<?
print str_repeat("i",1024000);
?>
Explicando:
Criamos o arquivo carregar_bytes.php, que conterá unicamente um processo aleatório de repetições até alcançar o valor de 1024000, 1000 KB, utilizando a função str_repeat(); que funciona como algo parecido a um loop. Repetirá 1024000, a letra i
Chamaremos o arquivo test.php,
Primeiro, utilizaremos a função set_time_limit(), para indicar que não há limite no tempo de execução do script, lembremos que por default vem no php.ini 30 segundos, e se este tempo for alcançado será produzido um erro fatal de tempo de execução.
Obtemos o tempo nesse instante em milésimos de segundos
Logo, faremos uma abertura do arquivo anterior e obtemos o conteúdo, mediante a função file_get_contents(), cabe destacar que o parâmetro que devemos utilizar deve seguir o esquema: protocol:// para que seja tomado como uma URL e se extraia o resultado do processo repetido anteriormente, do contrário se assumirá que o arquivo é local e se executará o código fonte diretamente: ou seja devemos colocar;
file_get_contents('http://odominio/carregar_bytes.php'), para que funcione corretamente.
Porém, não imprimiremos na tela o conteúdo, somente o carregaremos.
Agrupamos na variável $tamanho_KB, a longitude de caracteres de $conteudo, e o dividimos entre 1024; para passá-lo de BYTES A KB.
Quanto à abertura, voltamos a obter o tempo em milésimos de segundos para verificar quanto tempo transcorreu durante a execução do passo anterior e agrupamos esse valor na variável $tempo_utilizado, lhe damos formato com a função number_format();
Obtemos a velocidade em KBPS, dividindo o total de KB carregados, entre o tempo empregado;
Por exemplo, se: 100 Kb, são carregados em 2 segundos, a velocidade nesse instante é de 50 Kbps, mas ode variar dependendo de muitos fatores.
Imprimimos o resultado, e geramos um atraente esquema visual.
Comentários do artigo