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

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

Avatar

Anónimo

17 de Noviembre de 2006 a las 11:58 am

$inactive = time()-(60*60*TIMEOUT);

time entrega segundo, cierto?, si es asi, entonces contabilisara todos los usuarios activos por 20 horas, o no?

Avatar

Juan Miguel

12 de Marzo de 2007 a las 4:14 am

muy interesante tu script, pero como se hace despues para ejecutar en segundo plano?? gracias

Avatar

oscar ascencio

21 de Junio de 2007 a las 9:50 am

un programa de php que reciba una fecha y calcule los dias que faltan para terminar el año y muestre un diseñode pagina distinto a el mes que introduce la fecha.

por favor ayudenme

Avatar

edwin

1 de Diciembre de 2007 a las 4:30 pm

mira necesito saber como hago una encuesta, en php y msql, pues culquier documento me sirve

Avatar

edwin

1 de Diciembre de 2007 a las 4:30 pm

mira necesito saber como hago una encuesta, en php y msql, pues culquier documento me sirve

Avatar

julmago

1 de Octubre de 2008 a las 10:23 pm

en la web tengo un sitema que manda los cv a las empresas, el problema que hasta que no los mande se no habre la otra ventan, yo queria saber si esta la posibilidad de enviar los mail en segundo plano, digamos que toca en boton enviar y directamente salta a la otra ventan diciendo que ya fueron enviados, pero mientrastanto se sigue enviando en segundo plano.
Gracias y saludos

Avatar

JANNET

23 de Enero de 2009 a las 12:02 am

LOS SCRIPTS DE PHP HACEN MARAVILLAS BUEN BLOG

energia solar

Avatar

Antonio

27 de Enero de 2009 a las 8:55 pm

No veo los icons de mi messenger de Hotmail cuando los envio, antes los veia,
no sé cómo arreglar este problema, agradecería me ayudaran,
gracias

Dejar un comentario

Patrocinadores

¿Interesado en patrocinar TuFunción?

Suscripción

Primera División