Programar un script PHP para saber quién está en línea

Por el 15 de noviembre de 2006

en: Programacion

En este tutorial os trataremos de enseñar como programar un script para saber cuantos usuario hay en linea en tu página web,primero crearemos un scrip muy simple y despues le iremos añadiendo en futuras revisiones caracteristicas nuevas como la localización de los usuarios…

Pero primero dejame explicarte cómo va a funcionar.

Nuestro script guardara tanto la ip como la fecha y se actualizará cada vez que un visitante utiliza nuestra página, el script correrá en un segundo plano.

Estas son sus características:

- Chequea si el visitante ha sido ya registrado
- Del mismo modo inserta o actualiza los visitantes que ya existen
- Borra los visitantes que lleva un largo tiempo inactivos
- No retrasa la carga de la página

Estos son los tres primeros pasos:

- Creación de la base de datos

CREATE TABLE `online` (
`onlineid` int(5) NOT NULL AUTO_INCREMENT,
`ipaddress` varchar(255) NOT NULL DEFAULT ”,
`lastactive` int(11) NOT NULL DEFAULT ’0′,
PRIMARY KEY (`onlineid`)
) TYPE=MyISAM AUTO_INCREMENT=0;

- Y este el código con el que conseguiremos lo que buscamos:

include ('mysql.php');

# Timeout - Cuanto es el tiempo maximo en minutos que quieres permitir estar a un usuario activo?
define ('TIMEOUT', 20);

//Chequea si el usuario ya existe
$ipaddress = ss($_SERVER['REMOTE_ADDR']);
$lastactive = time();
$intable = $db->query_first (“SELECT onlineid FROM online WHERE ipaddress = ‘$ipaddress’”);

if ($intable == false) {
// Añade un nuevo visitante
$db->query (“INSERT INTO online (ipaddress, lastactive) VALUES (‘$ipaddress’, $lastactive)”);
} else {
// Actualiza un visitante ya existente
$db->query (“UPDATE online SET lastactive = $lastactive WHERE ipaddress = ‘$ipaddress’”);
}

// Borra visitantes que han excedido el tiempo máximo
$inactive = time()-(60*60*TIMEOUT);
$db->query (“DELETE FROM online WHERE lastactive < $inactive");
?>

(Puedes conseguir el archivo de ‘mysql.php’ aquí)

No precisa de mucha explicación puesto que es bastante fácil entender. La única cosa que se deberia mencionar es cuando se quiere saber que visitantes deben de ser eliminas,este código primero calcula cuáles accedieron hace 20 minutos, y considera a cualquier visitante en el cual su hora activa es superior a 20 minutos como usuario desconectado.

// Asegurandose que la imagen ha sido enviada al navegador
ob_implicit_flush(TRUE);

// Se mantiene funcionando incluso despues de la conexion
@ignore_user_abort(true);

sendGIF();

function sendGIF(){
$img = base64_decode(‘R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAEALAAAAAABAAEAAAIBTAA7′);
header(‘Content-Type: image/gif’);
header(‘Content-Length: ‘.strlen($img));
header(‘Connection: Close’);
print $img;

}

Este código primero se cerciora de que la imagen ha sido enviada, y después fija la opción ignore_user_abort a TRUE, que hace que la escritura funcione, incluso después de que la conexión sea cerrada, que es exactamente lo que deseamos. Entonces envía la imagen GIF, usando cabeceras y datos estándares.

Si combinas estos dos primeros pasos tendremos nuestro archivo de “whosonline.php”.

Todo lo que necesitamos ahora es un código simple para exhibir a cada uno que esté en línea, y nosotros habremos creado un simple script para saber quien esta en línea.

Yo utilizo el siguiente código para hacer esto:

(Puedes conseguir el archivo de ‘mostrar_contador.php’ aquí)

Fuente en ingles

Dejar un comentario