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

Otros artículos relacionados

Califica esta nota:

1 estrella2 estrellas3 estrellas4 estrellas5 estrellas (1 votos, promedio: 3.00 de 5)
Loading ... Loading ...

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


  2. Unregistered

    solo me aparece 1


  3. lalo

    no pasa nada…


  4. andres

    no se como realizar el punto dat exactamente


  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


  6. Unregistered

    no pasa nada plop


  7. wazaa

    No es correcto. Pero es una guia.


  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…


  9. danioviedo

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


  10. danioviedo

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


  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


  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


  13. nexux

    Funciona bien. Super.


  14. Alberto

    Dale un chmod 777 file.dat

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


  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!


  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.


  17. Juniorknot

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

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


  18. María Beltrán

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


  19. Yamilskate

    Y donde se pone ese codigo???

    // http://yoshimaker.tk //


  20. david

    esto vale callampa


  21. forest

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


  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.


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


  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().” “;
    }
    }


  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.


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.


Sobre el Autor

Fernando José Pereda Garcimartín

Fernando José Pereda Garcimartín
Colaborador de Maestros del Web y uno de los moderadores en Foros del Web

Más artículos de Fernando José Pereda Garcimartín

Las Notas en tu correo


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