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í)
Enlaces Relacionados
- Limitar descargas con Php
- Técnica de generación procedural (64KB generando 1.9GB)
- Los mejores IDEs para Php
- Zend Studio
- Las herramientas más útiles para desarrolladores Php
- XML y PHP 5
- Top 10 programadores
- Técnicas de optimización de código
- Reglas básicas para un desarrollador web
- Crea thumbnails con php





encuesta
mira necesito saber como hago una encuesta, en php y msql, pues culquier documento me sirve
encuesta
mira necesito saber como hago una encuesta, en php y msql, pues culquier documento me sirve
nesecito un script
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
¿Como haces para ejecutar el script en segundo plano?
muy interesante tu script, pero como se hace despues para ejecutar en segundo plano?? gracias
duda
$inactive = time()-(60*60*TIMEOUT);
time entrega segundo, cierto?, si es asi, entonces contabilisara todos los usuarios activos por 20 horas, o no?
Enviar un comentario nuevo