Foros del Web » Programando para Internet » PHP »

Lista de usuarios online

Estas en el tema de Lista de usuarios online en el foro de PHP en Foros del Web. Hace un par de semanas preguntana por cómo hacer un script para saber el número de usuarios online. Este script cumple su función correctamente: <?php ...
  #1 (permalink)  
Antiguo 07/06/2004, 12:38
 
Fecha de Ingreso: julio-2003
Ubicación: España
Mensajes: 723
Antigüedad: 20 años, 9 meses
Puntos: 0
Lista de usuarios online

Hace un par de semanas preguntana por cómo hacer un script para saber el número de usuarios online. Este script cumple su función correctamente:

<?php

$archivo="users_online.nel"; //archivo donde almacenarán los usuarios activos
$inactivo=600; //tiempo en segundos en que un usuario estará inactivo
$contar=0;

$fp=fopen($archivo,"r");
$tiempo=time();
$contenido=fread($fp,1024);/*En vez de 1024 podemos poner: filesize($archivo)*/
fclose($fp);

$lineas=split("\n",$contenido);
$filas=file($archivo);

for ($a=0; $a < sizeof($filas); $a++) {
$datos=split(':',$lineas[$a]);
$descontar=$tiempo-$inactivo;

if ($datos[0] != $REMOTE_ADDR && $datos[1] > ($descontar)) {
$res.= $datos[0].":".$datos[1]."\n";
$contar++;
}
}

$res.="$REMOTE_ADDR:$tiempo\n";

$contar++; // Ya tenemos el total de usuarios activos
$fp=fopen($archivo,"w");
fwrite ($fp,$res);
fclose($fp);

//Ahora damos formato a la salida, modifica esto a tu gusto
echo "<table id=\"usersonline\" class=\"bc\" border=\"1\" align=\"left\" cellpadding=\"5\" width=\"165\">\n<tr><th>Usuarios:</th></tr>\n
<tr><td class=\"b1tLf10\">";
echo "Usuarios online :<b>".$contar."</b>";
echo "</td></tr></table>";
?>

Pero ahora me gustaría sacar también un listado de los usuarios que están conectados y no simplemente contarlos...

Pero no tengo idea de cómo hacerlo...

Dónde puedo mirar cuáles son las variables superglobales tipo $REMOTE_ADDR?

Si sirve de algo los usuarios registrados tienen una cookie que guarda su nombre...

Haber si alguien me puede echar un cable.

Saludos y gracias.
__________________
Solo nosotros podemos decidir qué hacer con el tiempo que se nos ha dado. (Gandalf)
  #2 (permalink)  
Antiguo 07/06/2004, 14:59
Avatar de xcorpion  
Fecha de Ingreso: octubre-2003
Ubicación: m é x i c o
Mensajes: 676
Antigüedad: 20 años, 6 meses
Puntos: 4
la variable remote_addr la puedes conseguir con $_SERVER["REMOTE_ADDR"] pero no creo que te sirva de mucho, creo que te serviria mucho leer este articulo: http://www.maestrosdelweb.com/editorial/phpusr/
  #3 (permalink)  
Antiguo 07/06/2004, 15:04
 
Fecha de Ingreso: julio-2003
Ubicación: Arequipa - Peru
Mensajes: 148
Antigüedad: 20 años, 8 meses
Puntos: 0
Hola, segun lo que veo en tu script ya tienes la solucion en tu archivo users_online.nel por que si no me equivoco y si es asi corrigeme, pero en ese archivo debes de tener la informacion de esta manera:
<Direccion IP>:<Tiempo de Session>
creo que tal ves puedes modificar tu script si es un usuario registrado y guarda sesion en su maquina (cookie) que registre en ingreso en un archivo users_reg.nel pero con el siguiente formato <usuario>:<Tiempo de Session> y ya tendrias si el usuario esta registrado y el total si no esta registrado.
Bueno algo asi no esta bien elaborado pero tambien fue de uno parecido que me encontre que lo modifique espero que te ayude:

Código PHP:

function ValUsu($nickN$VcID){
            
$estado false;
            
$archivo="usuarios.dat"//archivo donde almacenarán los usuarios activos
            
$inactivo="480";//cargamos variable de tiempo
            
$tiempo=time();
            
$filas=file($archivo);
            for (
$a=0$a sizeof($filas); $a++) {
                
$datos=split(':',$filas[$a]);
                if (
$datos[0] != $nickN && $datos[1] != $VcID && ($tiempo $datos[2]) < $inactivo) {
                    
$res .= $datos[0].":".$datos[1].":".$tiempo."\n";
                }
                if (
$datos[0] == $nickN && $datos[1] == $VcID && ($tiempo $datos[2]) < $inactivo) {
                    
$estado true;
                }
            }
            if (
$estado == true){
                
$res .= $nickN ":" $VcID ":" $tiempo;
            }
            
$fp=fopen($archivo,"w") or die("el fichero no se ha podido abrir");
            
fwrite ($fp,$res);
            
fclose($fp);
            return 
$estado;

bueno y para sabe que usuario en linea solo hay que abrir el archivo y mostrar el contenido.

Saludos

Mauricio
  #4 (permalink)  
Antiguo 07/06/2004, 15:04
Avatar de xcorpion  
Fecha de Ingreso: octubre-2003
Ubicación: m é x i c o
Mensajes: 676
Antigüedad: 20 años, 6 meses
Puntos: 4
mas bien yo debi haber leido el articulo, van mas o menos por la misma. Ok puedes comparar las ips con los usuarios y en el caso de que este un usuario activo ves la ip y seleccionas al usuario para mostrarlo o creas un array con las ip de los usuarios activos y luegos haces una multiseleccion.
  #5 (permalink)  
Antiguo 08/06/2004, 14:02
 
Fecha de Ingreso: julio-2003
Ubicación: España
Mensajes: 723
Antigüedad: 20 años, 9 meses
Puntos: 0
Gracias a los dos por vuestras respuestas. En cuanto tenga tiempo pensaré en como resolverlo...
__________________
Solo nosotros podemos decidir qué hacer con el tiempo que se nos ha dado. (Gandalf)
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:23.