Usuarios activos con PHP
| CREATE TABLE control_ip (
ip VARCHAR(15) NOT NULL,
fecha INT(14) UNSIGNED NOT NULL,
INDEX (ip)
);
|
Como veis, el campo ip, que almacena el número IP del visitante, está indexado. Esto nos permitirá una selección rápida. En contrapartida, como todo campo indexado, su tamaño en memoria será doblado lo cual no tiene mucha importancia ya que la tabla tendrá un número de registros bastante limitado. Lo importante en efecto es que el script se ejecute rápidamente sin consumir demasiados recursos del servidor, sobretodo teniendo en cuenta que se trata de un código que será sistemáticamente ejecutado en cada una de las páginas del sitio.
Pasemos a continuación a mostrar el script que utilizaremos:
| <?
////////////////////////////////////////////
//USUARIOS ACTIVOS
//Calcula el numero de usuarios activos
////////////////////////////////////////////
function usuarios_activos()
{
//permitimos el uso de la variable portadora del numero ip en nuestra funcion
global $REMOTE_ADDR;
//asignamos un nombre memotecnico a la variable
$ip = $REMOTE_ADDR;
//definimos el momento actual
$ahora = time();
//conectamos a la base de datos
//Usad vuestros propios parametros!!
$conn = mysql_connect($host,$user,$password);
mysql_select_db($db,$conn);
//actualizamos la tabla
//borrando los registros de las ip inactivas (24 minutos)
$limite = $ahora-24*60;
$ssql = “delete from control_ip where fecha < “.$limite;
mysql_query($ssql);
//miramos si el ip del visitante existe en nuestra tabla
$ssql = “select ip, fecha from control_ip where ip = ‘$ip’”;
$result = mysql_query($ssql);
//si existe actualizamos el campo fecha
if (mysql_num_rows($result) != 0) $ssql = “update control_ip set fecha = “.$ahora.” where ip = ‘$ip’”;
//si no existe insertamos el registro correspondiente a la nueva sesion
else $ssql = “insert into control_ip (ip, fecha) values (‘$ip’, $ahora)”;
//ejecutamos la sentencia sql
mysql_query($ssql);
//calculamos el numero de sesiones
$ssql = “select ip from control_ip”;
$result = mysql_query($ssql);
$usuarios = mysql_num_rows($result);
//liberamos memoria
mysql_free_result($result);
//devolvemos el resultado
return $usuarios;
}
?>
|
Podéis observar, como viene siendo norma, que el script es expresado en forma de función. Después de definir la IP y el momento en el que el script está siendo ejecutado, pasamos a interaccionar con la base de datos. Dentro de este proceso, podemos distinguir distintas fases:
- Conexión con la base de datos
- Barrido de la tabla para eliminar los registros obsoletos.
- Inserción o actualización de un registro dependiendo de si el visitante es nuevo o no.
- Cómputo del número de registros de la tabla
La función finaliza liberando el espacio de memoria utilizado en sus consultas y enviando el resultado del cálculo efectuado.
En líneas generales el script es de fácil comprensión. Puede que alguna de las funciones empleadas os sea desconocida. Si es así, acudid al la pagina oficial de PHP donde podréis encontrar detalles en cuanto a su empleo.
Para sacar el valor proporcionado por la función a nuestro script principal tendremos que realizar una llamada clásica del tipo:
$active_users = usuarios_activos();
He aquí en definitiva un script sencillo que puede dar a vuestro sitio una imagen un poco más dinámica. Además, podéis utilizarlo y mejorarlo para crear vuestro propio sistema de estadísticas internas. Eso os lo dejamos a vosotros.
