> Manuales > Taller de PHP

Cómo obtener un reflejo aproximado de la conexión a internet, medida en Kbps.

Estudiando rápidamente los sistemas que obtienen un reflejo aproximado de la conexión a Internet, medida en Kbps; se me ocurrió realizar algo similar en Php.

¿Cual es la utilidad?

Se puede determinar en cuanto tiempo aproximado se descargara un archivo de Internet.
Por ejemplo, si estamos elaborando una página de descargas y queremos mostrarle al usuario en cuanto tiempo APROX, estará ese archivo en su PC.

En realidad algo extremadamente sencillo ya veremos más adelante porque.

Teoría Básica

Es importante resaltar que un carácter CUALQUIERA siempre tendrá un tamaño de 1 Byte, es decir 8 impulsos electrónicos ( 8 Bit) , por lo cual una cadena de texto que contenga mil veinticuatro caracteres en total, tendrá una dimensión de 1024 Bytes lo que seria igual a 1 KB.

1 KB es igual 1024 Bytes
1 MB es igual a 1024 KB
1 GB es igual a 1024 MB
1 TB es igual a 1024 GB

El código fuente:
archivo : test.php

<?
set_time_limit(0);
$tiempo_micro[1]= microtime();
$q_espacios = explode(" ",$tiempo_micro[1]);
$tiempo_[1]= $q_espacios[1]+$q_espacios[0];

$contenido=file_get_contents('http://localhost/cargar_bytes.php'); /* cambiar por path real (URL) http://tudominio/cargar_bytes.php)*/
$tamano_KB= strlen($contenido)/1024;

$tiempo_micro[2] = microtime();
$q_espacios= explode(" ",$tiempo_micro[2]);
$tiempo_[2] =$q_espacios[1] + $q_espacios[0];
$tiempo_utilizado = number_format(($tiempo_[2] - $tiempo_[1]),3, "." ,",");

$velocidad= round($tamano_KB/$tiempo_utilizado,2);
echo 'Su velocidad de conexión es de: '.$velocidad.' Kbps <br> Se enviarón:'.$tamano_KB.
' Kb, Tiempo utilizado: '.$tiempo_utilizado.' Segundos <hr>';

for ($i=10; $i>=1; $i--){
$val_Kb=$i*100;
if($velocidad>=800)$velocidad_=800;
else $velocidad_=$velocidad/2;

if($velocidad>=$val_Kb && !$col){
echo '<div style="background-color:#F0F0F0; width:500px; float:left"><img width="'.($velocidad_).'" height="8" style="background-color: #FF0000" border="0"></div><strong>Su conexión</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>';
}
?>


archivo : cargar_bytes.php

<?
print str_repeat("i",1024000);
?>


Explicando:

Creamos el archivo cargar_bytes.php, que contendrá únicamente un proceso aleatorio de repeticiones hasta que alcance el valor de 1024000, 1000 KB, utilizando la función str_repeat(); que funciona en algo similar a un bucle. Se repetirá 1024000, la letra i

Llamaremos el archivo test.php,

Primero que nada utilizaremos la función set_time_limit(), para indicar que no hay limite en el tiempo de ejecución del script, recordemos que por default viene en el php.ini 30 segundos, y si este tiempo se alcanza se produce un error fatal de tiempo de ejecución.

Obtenemos el tiempo en ese instante en microsegundos

Luego hacemos una apertura del archivo anterior y obtenemos el contenido, mediante la función file_get_contents(), cabe destacar que el parámetro que debemos utilizar debe seguir el esquema: protocol:// para que se tome como una URL y se extraiga el resultado del proceso repetitivo anterior, de lo contrario se asumirá que el archivo es local y se ejecutara el código fuente directamente: es decir debemos colocar;

file_get_contents(‘http://eldominio/carcar_bytes.php’), para que funcione correctamente.
Pero no imprimiremos en pantalla el contenido, solo lo cargaremos.
Agrupamos en la variable $tamano_KB, la longitud de caracteres de $contenido, y lo dividimos entre 1024; para pasarlo de BYTES A KB.

Luego de la apertura, volvemos a obtener el tiempo en microsegundos para verificar cuanto tiempo trascurrió durante la ejecución del paso anterior y agrupamos ese valor en la variable $tiempo_utilizado, le damos formato con la función number_format();

Obtenemos la velocidad en KBPS, dividiendo el total de KB cargados , entre el tiempo empleado;
Por ejemplo si: 100 Kb, son cargados en 2 segundos, la velocidad en ese instante es de 50 Kbps, pero puede variar dependiendo de muchos factores.

Imprimimos el resultado, y generamos un atractivo esquema visual.

Emmanuel García De Caro

Webmaster de Blasten.com

Manual