Foros del Web » Programando para Internet » PHP »

Usuarios Activos Sin Base De Dato!!!

Estas en el tema de Usuarios Activos Sin Base De Dato!!! en el foro de PHP en Foros del Web. UN PEQUEÑO APORTE!!!! CON ESTE SCRIPT PODEMOS MOSTRAR EN NUESTRA PAGINA WEB CUANTOS USUARIOS ESTAN EN NUESTRA WEB SIN NECESIDAD DE CREAR UNA BASE DE ...
  #1 (permalink)  
Antiguo 30/03/2005, 06:39
Avatar de Bunker
(Desactivado)
 
Fecha de Ingreso: marzo-2005
Ubicación: .::Florida-Usa::.
Mensajes: 234
Antigüedad: 19 años
Puntos: 0
Exclamación Usuarios Activos Sin Base De Dato!!!

UN PEQUEÑO APORTE!!!!

CON ESTE SCRIPT PODEMOS MOSTRAR EN NUESTRA PAGINA WEB CUANTOS USUARIOS ESTAN EN NUESTRA WEB SIN NECESIDAD DE CREAR UNA BASE DE DATO!!!!
ESPERO QUE LES GUSTEN!!! SUERTE


activos.php
<?
// Usuarios activos con PHP sin utilizar bases de datos

// Tiempo en segundos en que expira la sesión.
$fin_session = 600;

// En usuarios.dat guardaremos el IP y hora en que el usuario inicio la sesión
$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] ) < $fin_session ))
{
$contenido .= $REMOTE_ADDR.":".time()." ";
}
}

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

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

$USUARIOS_ACTIVOS = count($array);

// Imprimimos la cantiadad de usuarios activos
echo "Hay ".$USUARIOS_ACTIVOS." usuarios activos";
?>

SIGAN APORTANDO MAS ESCRIPTS
UN SALUDOS A TODOS
  #2 (permalink)  
Antiguo 30/03/2005, 06:41
Avatar de Bunker
(Desactivado)
 
Fecha de Ingreso: marzo-2005
Ubicación: .::Florida-Usa::.
Mensajes: 234
Antigüedad: 19 años
Puntos: 0
UPPPSSS SE ME OLVIDO JIJIJI

El código que vamos a utilizar en este artículo, consta simplemente en editar un archivo de texto (usuarios.dat) cada vez que ingresa un usuario y almacenar el número de IP y la hora de inicio de sesión del usuario en ese archivo.


Para que el script funcione correctamente, tendremos que crear el archivo usuarios.dat sin incorporarle nada de contenido y darle permisos de escritura.
  #3 (permalink)  
Antiguo 30/03/2005, 12:59
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Hola,

Estaria bien que usases $_SERVER, por los temas de register_globals. Y creo que
Código PHP:
for ( $i $i sizeof($arr) ; $i++ )
{
  
$tmp explode(":",$arr[$i]);
  if (( 
$tmp[0] != $REMOTE_ADDR ) && (( time() - $tmp[1] ) < $fin_session ))
  {
    
$contenido .= $REMOTE_ADDR.":".time()." ";
  }

tendria que ser
Código PHP:
for ( $i $i sizeof($arr) ; $i++ )
{
  
$tmp explode(":",$arr[$i]);
  if (( 
$tmp[0] != $REMOTE_ADDR ) && (( time() - $tmp[1] ) < $fin_session ))
  {
    
$contenido .= $tmp[0].":".$tmp[1]."\n";
  }

porque si lo entiendo bien quieres reescribir solo las entradas anteriores que no correspondan con esa IP, manteniendo el tiempo original. Tal como lo tenias, pisabas las IPs viejas y actualizabas los tiempos de conexion.

Tambien haria $contenido una array, igual que lo lees del fichero. Luego lo grabas con un implode, pero no vuelves a leer una segunda vez el fichero, puedes hacer el count de $contenido.

Tambien usaria un foreach en lugar de un for normal, no llamaria a time() dentro del bucle, lo llamaria antes metiendo su valor dentro de una variable y usaria esa variable en el bucle (manias, llamar a una funcion es mas "costoso" que consultar una variable).

Y luego habria que testear los problemas de concurrencia. ¿Que pasa en el hipotetico caso que 2 usuarios a la vez llamaen a esa funcion? ¿Como se comporta?

Saludos.

PD: Son criticas con intencion de ayudarte a mejorar (en mi opinion) el script.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #4 (permalink)  
Antiguo 30/03/2005, 14:09
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Y luego habria que testear los problemas de concurrencia. ¿Que pasa en el hipotetico caso que 2 usuarios a la vez llamaen a esa funcion? ¿Como se comporta?
En ese caso .. lo que suele pasar es que el modo "w" que dice .. crea archivo si no existe (o no puede accederlo) lo "resetearía" (bueno .. así he visto preguntas referentes a trabajo "masivo" con archivos y concurrencia).

Estaría bueno que se bloquease el archivo durante el proceso de escritura con la función:
flock()
http://www.php.net/manual/en/function.flock.php

Y sería bueno consultar por si se puede escribir el archivo antes con is_writable() para intentar evitar dicho problema de concurrencia.

Un saludo,

Última edición por Cluster; 30/03/2005 a las 14:10
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 21:10.