Maestros del Web


Estás en Inicio / Editorial / Desarrollo Web

10.05.2002

Usuarios activos con PHP

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

Califica esta nota:

1 estrella2 estrellas3 estrellas4 estrellas5 estrellas (1 votos, promedio: 3 de 5)
Loading ... Loading ...
Fernando José Pereda Garcimartín

Sobre el autor

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

Si eres nuevo en Maestros del Web y te agradan nuestras publicaciones, te invitamos a suscribirte a nuestro Feed.

Sindícanos en: Google Reader, Bloglines, My Yahoo o My MSN | ¿Qué es el Feed?

Comentarios

25 comentarios en total.

  1. zamy 30.09.2003 - 18:50 - #

    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 29.10.2003 - 06:40 - #

    solo me aparece 1

  3. lalo 12.12.2003 - 11:35 - #

    no pasa nada…

  4. andres 16.03.2004 - 10:31 - #

    no se como realizar el punto dat exactamente

  5. Rafael 30.03.2004 - 17:08 - #

    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 07.04.2004 - 12:09 - #

    no pasa nada plop

  7. wazaa 13.05.2004 - 06:22 - #

    No es correcto. Pero es una guia.

  8. orochies 25.06.2005 - 14:29 - #

    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 14.07.2005 - 13:57 - #

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

  10. danioviedo 14.07.2005 - 13:58 - #

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

  11. George - Mexico 15.07.2005 - 18:29 - #

    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 06.11.2005 - 20:22 - #

    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 23.06.2006 - 10:23 - #

    Funciona bien. Super.

  14. Alberto 24.06.2006 - 20:36 - #

    Dale un chmod 777 file.dat

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

  15. Raul Reyes 21.07.2006 - 16:04 - #

    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 09.08.2006 - 07:46 - #

    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 07.09.2006 - 17:08 - #

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

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

  18. María Beltrán 09.09.2006 - 02:00 - #

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

  19. Yamilskate 20.09.2006 - 18:55 - #

    Y donde se pone ese codigo???

    // http://yoshimaker.tk //

  20. david 02.11.2006 - 06:38 - #

    esto vale callampa

  21. forest 10.11.2006 - 14:15 - #

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

  22. marc 17.02.2007 - 14:00 - #

    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. jANsANCHEZ.cOM 24.03.2008 - 11:11 - #

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

  24. mak 18.04.2008 - 04:22 - #

    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 18.04.2008 - 04:32 - #

    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.


Anuncios por Q
-


Maestros del Web es el punto de encuentro para los entusiastas de la red.

Creative Commons by-nc-sa 3.0 | Política de Privacidad | CMS: Wordpress