Un espacio para los entusiastas del web

Usuarios activos con PHP

Publicado el 10 de Mayo, 2002

Vamos a explicar cómo contar usuarios activos con PHP.

En esta ocasión no usaremos
ninguna BD, usaremos un archivo llamado usuarios.dat

Entonces, vamos a crear nuestro script PHP y lo llamamos activos.php

<?php

$tiempo_logout = 600; // segundos tras los cuales un usuario es marcado como inactivo

$arr = file("usuarios.dat");
$contenido = $REMOTE_ADDR.":".time()." ";

for ( $i = 0 ; $i < sizeof($arr) ; $i++ )
{
$tmp = explode(":",$arr[$i]);
if (( $tmp[0] != $REMOTE_ADDR ) && (( time() - $tmp[1] ) < $tiempo_logout ))
{
$contenido .= $REMOTE_ADDR.":".time()." ";
}
}

$fp = fopen("usuarios.dat","w");
fputs($fp,$contenido);
fclose($fp);

$array = file("usuarios.dat");

$USUARIOS_ACTIVOS = count($array);
?>

Bueno, explicamos
paso a paso lo que hace el script:

  • Lo primero es sacamos el usuarios.dat a un array
  • Creamos el archivo de
    texto con las IP y la hora de visita de los que visitan nuestra web
  • “Borramos” de ese archivo los que llevan más de $tiempo_logout
    sin actividad
  • Escribimos el fichero
  • Declaramos una variable $USUARIOS_ACTIVOS que contiene el número de usuarios activos del momento
  • Jeje….así de sencillo ;)
  • La forma de utilizar el Script, es muy sencilla, al principio
    de cualquier página de tu web, pones <?php
    include(“activos.php”) ?>
    y donde quieras mostrar el número
    de usuarios, usas la variable $USUARIOS_ACTIVOS.

Documento redactado por Ferdy apoyado en el código original de Eric
para Maestros del Web

¿Te gustó?

¡Sí, me gusta! Le ha gustado a 5 personas
Loading ... Loading ...

Fernando José Pereda GarcimartínFernando José Pereda Garcimartín para Maestros del Web.
Agrega tu comentario | Enlace permanente al artículo

Síguenos en: @maestros | Fan page

Comentarios

  1. zamy

    Oye yo ya tengo todo..lo que me dices pero no me funciona…solo me aparece que estan activos “1″…ups…help
    zamyad@hotmail.com

    Responder
  2. Unregistered

    solo me aparece 1

    Responder
  3. lalo

    no pasa nada…

    Responder
  4. andres

    no se como realizar el punto dat exactamente

    Responder
  5. Rafael

    Bueno primero que halgo mas, les felicito por su excelente web. Por otra parte, quisiera saber realmente como funciona este script, porque al estar conectado a nuestra pagina solo aparece 1 usuario conectado y lo probamos con tres maquinas a la ves. Tiene que ver con que nuestra pagina este elaborada con varios frames y este contador no este colocado en el main?, si alguien tiene la respuesta o posiblemente ese mal, les agradeceria su ayuda. Gracias y cuidense mucho. Ralph Triton

    Responder
  6. Unregistered

    no pasa nada plop

    Responder
  7. wazaa

    No es correcto. Pero es una guia.

    Responder
  8. orochies

    oigan a my tambien me pasa lo mismo solo me muestra 1 usuario navegando cuando hemos entrado 4 personas a la ves de distintos paises..

    la pagina tiene un iframe pero el script no se ejecuta dentro del iframe acaso sera por eso…

    podria alguien responder a nuestras dudas ya que veo que a otros les pasa lo mismo…

    _Saludos…

    Responder
  9. danioviedo

    No Puede Ser Que Publiquen Algo Que No Funciona!!!!! Baja Mucho El Nivel De La Pagina Eso!!!! Que Desastre!!!

    Responder
  10. danioviedo

    Osea….ponganse Media Pila Y Publiquen Algo Que Funcione!!!!

    Responder
  11. George - Mexico

    Bueno amigos esto esta mas que probado y funciona,

    eh retomado algunos metodos y le he aplicado algunos cambios. lo primero que tenemos que hacer es crear una tabla que contenga los siguientes campos,
    1.- ip con campo varchar (15)
    2.- ips con campo varchar (15)
    Nota: este campo es opcional pero ojo ala hora de las sentencias SQL quitenselo.

    3.-fecha int(10)

    Una vez creada la base de datos procedamos al lo primordial, el codigo php

    < ?php
    //haciendo conexion con la base de datos

    require_once(“conexion.php”);
    validar_conexion_fns();

    //obteniendo la ip del usuario.
    if(getenv(“HTTP_X_FORWARDED_FOR”))
    {
    $ip = getenv(“HTTP_X_FORWARDED_FOR”);
    $client = gethostbyaddr($_SERVER['HTTP_X_FORWARDED_FOR']);
    addslashes($ip);
    }
    else
    {
    $ip = getenv(“REMOTE_ADDR”);
    $client = gethostbyaddr($_SERVER['REMOTE_ADDR']);
    addslashes($ip);
    }
    $str = preg_split(“/\./”, $client);
    $i = count($str);
    $x = $i – 1;
    $n = $i – 2;
    $isp = $str[$n] . “.” . $str[$x];
    /* Muestra la ip y el isp del usuario
    echo ‘

    Tu IP: ‘.$ip.’
    Tu ISP: ‘.$isp.’

    ‘; */

    //Determinar la hora actual.
    $time_now = time() + 1440;

    //Eliminar las ip incativas despues de 24 minutos.
    $time_out = time();

    $sql=”DELETE FROM ip_usuarios WHERE fecha < '$time_out'";
    $result=mysql_query($sql);

    //Ver si una ip existe, si existe la atualizamos, si no la creamos.

    $sql2=”SELECT * FROM ip_usuarios WHERE ip=’$ip’”;
    $result2 = mysql_query($sql2);
    $row = mysql_num_rows($result2);
    if($row != 0)
    {
    $sql3=”update ip_usuarios SET fecha=’$time_now’ isp=’$isp’ WHERE ip=’$ip’”;
    }
    else
    {
    $sql3=”INSERT INTO ip_usuarios(ip,isp,fecha) VALUES (‘$ip’,'$isp’,'$time_now’)”;
    }
    $result3 = mysql_query($sql3);

    //Seleccionar las ip para contabilizar los usuarios.
    $sql4=”SELECT ip FROM ip_usuarios”;

    $result4=mysql_query($sql4);

    //Mostramos los usuarios que hay conectados ala pagina en este momento.
    $usuarios=mysql_num_rows($result4);
    /*
    Cual quier duda o comentario escriban a jasr_geo@hotmail.com con gusto atendere sus dudas.
    */

    ?>

    No creo que haga flata explicar el codigo, creo que tiene los comentarios suficientes para entenderle, pero si aun tienen dudas envienme un mail e se los explicare mas a detalle ya que ando corto de tiempo.

    espero y les sirva ATTE:GEORGE

    Responder
  12. No Registrado

    a los que le sale no mas de uno es que nesesitan ponerlo en el servidor probarlo y esperar a que marque mas de dos para ver si funciona realmente.

    Si no? pueden leer un poco mas de TCP/IP para mas información

    XD es poquito XD XD

    Responder
  13. nexux

    Funciona bien. Super.

    Responder
  14. Alberto

    Dale un chmod 777 file.dat

    // http://albertux.fime.uanl.mx //

    Responder
  15. Raul Reyes

    Solo muestra un usuario por un error en el codigo, se debe forzar el retorno del carro para que funcione, asi:

    $contenido = $REMOTE_ADDR.”:”.time().”\n”;

    de otro modo todos los datos se grabaran en una sola linea y no en un arreglo!

    Responder
  16. claudia

    ami tp me funciona, y lo ice exactamente como explican.
    Solo me sale 1 usuario, he probado con 3 pcs a la misma vez, de amigos, y nada, solo sale 1 usuario. Ademas esta colocado en el main de la pagina.

    Responder
  17. Juniorknot

    Aja pero :S como se hace la variable esa de $USUARIOS_ACTIVOS ???

    // http://www.jalando.com //

    Responder
  18. María Beltrán

    Voz y Canto, Interpretación y Acento. Coaching de Actores y Cantantes.

    Responder
  19. Yamilskate

    Y donde se pone ese codigo???

    // http://yoshimaker.tk //

    Responder
  20. david

    esto vale callampa

    Responder
  21. forest

    a mi tambien me aparece 1 no capto alquien puede colaborarme..

    Responder
  22. marc

    Se ve directamente que el count($array) lo hace a $array la cual no se usa en ningun momento.
    Es un buen inicio.

    Por lo otro, senzillo y potente. Felicidades.

    Responder
  23. yO tENGO eL mISMO pROBLEMA, sOLO mE sALE uN uSUARIO aCTIVO. eNTONCES eSTA mAL eSE sCRIPT?.

    Responder
  24. mak

    donde dice:
    if (( $tmp[0] != $REMOTE_ADDR ) && (( time() – $tmp[1] ) < $tiempo_logout ))
    {
    $contenido .= $REMOTE_ADDR.”:”.time().” “;
    }
    }

    ha de poner:

    if (( $tmp[0] != $REMOTE_ADDR ) && (( time() – $tmp[1] ) < $tiempo_logout ))
    {
    $contenido .= $tmp[0].”:”.time().” “;
    }
    }

    Responder
  25. mak

    corregido, este si me funciona:

    <?php

    define(“USUARIOS_DATA_FILE”,”usuarios.data”);

    $tiempo_logout = 600; // segundos tras los cuales un usuario es marcado como inactivo

    $arr = @file(USUARIOS_DATA_FILE);
    $contenido = $_SERVER['REMOTE_ADDR'].”:”.time().”\n”;

    for ( $i = 0 ; $i < sizeof($arr) ; $i++ )
    {
    $tmp = explode(“:”,$arr[$i]);
    if (( $tmp[0] != $_SERVER['REMOTE_ADDR'] ) && (( time() – $tmp[1] )

    nota: hay que tener permisos de escritura en usuarios.data.

    Responder

Deja tu Comentario

Maestros del Web se reserva el derecho de moderación de los comentarios. Evita utilizar palabras soeces, ataques directos, descalificativos, insultos, de lo contrario tu comentario será eliminado.



Acerca de

Maestros del Web nace cuando intentamos traducir Webmaster al Español. Nacimos orientados al diseño y desarrollo web. Hoy somos un espacio de apoyo para los entusiastas que participan en proyectos en la red.
Leer más de Maestros del Web

Últimos comentarios