Foros del Web » Programando para Internet » PHP »

Contador de user online me reescribe archivo

Estas en el tema de Contador de user online me reescribe archivo en el foro de PHP en Foros del Web. Hola amigos, tengo una duda que la vengo remando hace bastante pero no doy del xq el error. Resulta que tengo un script (de los ...
  #1 (permalink)  
Antiguo 07/10/2014, 11:14
Avatar de alette666  
Fecha de Ingreso: febrero-2010
Ubicación: En la luna
Mensajes: 277
Antigüedad: 14 años, 9 meses
Puntos: 5
Pregunta Contador de user online me reescribe archivo

Hola amigos, tengo una duda que la vengo remando hace bastante pero no doy del xq el error. Resulta que tengo un script (de los mas de 200 que encontré en internet y en este foro); en donde se cuentan los usuarios únicos q visitan (o están visitando) la pagina en ese momento (un contador de usuarios online).

Bueno todo bien para el primer visitante, le aparece el numerito "1" q dice que es el primer usuario online; pero acá empezamos el problema cuando el segundo usuario ingresa a la pagina, este reescribe el archivo en dnd almaceno las IP y su tiempo correspondiente a la visita; o sea que no los va almacenando uno abajo del otro.
Paso mi código.

test.php
Código PHP:
<?php 
$dataFile 
"UserOnline.dat";//Archivo donde se almacenarán las IP - TIEMPO
$dataXml "UserOnline.xml";//Archivo donde se almacenará el contador
$sessionTime 1;//tiempo en *minutos* para considerar a alguien en línea antes de sacarlos

error_reporting(E_ERROR E_PARSE);
if(!
file_exists($dataFile)){
    
$fp fopen($dataFile"w+");
    
fclose($fp);
}

$ip $_SERVER['REMOTE_ADDR'];
$users = array();
$onusers = array();

//get users part
$fp fopen($dataFile"r");
$lineas 0;//*
flock($fpLOCK_SH);
while(!
feof($fp)){
    if(
fgets($fp)){//*
        
$lineas++;//*
    
}
    
$users[] = rtrim(fgets($fp32));
}
flock($fpLOCK_UN);
fclose($fp);

//cleanup part
$x 0;
$alreadyIn FALSE;
foreach(
$users as $key => $data){
    list( , 
$lastvisit) = explode("|"$data);
    if(
time() - $lastvisit >= $sessionTime 60){
        
$users[$x] = "";
    }else{
        if(
strpos($data$ip) !== FALSE){
            
$alreadyIn TRUE;
            
$users[$x] = "$ip|" time(); //update record
        
}
    }
    
$x++;
}

if(
$alreadyIn == FALSE){
    
$users[] = "$ip|" time();
}

//write file
$fp fopen($dataFile"w+");
flock($fpLOCK_EX);
$i 0;
foreach(
$users as $single){
    if(
$single != ""){
        
fwrite($fp$single "\r\n");
        
$i++;
    }
}
flock($fpLOCK_UN);
fclose($fp);

if(
$uo_keepquiet != TRUE){
    if(
$lineas!=$i){
        
$xml=new DomDocument('1.0''UTF-8');     
        
$usuarios=$xml->createElement('online');  
        
$usuarios=$xml->appendChild($usuarios);
    
        
$conectados=$xml->createElement('usuarios',$i);
        
$conectados=$usuarios->appendChild($conectados); 
        
$xml->formatOutput true
    
        
$strings_xml $xml->saveXML(); 
        
$xml->save(''.$dataXml.'');        
        echo 
$i;
    }else{
        echo 
$i;
    }    
}
?>
Aclaro que el archivo XML lo uso para otro trabajo q es mediante flash (q en eso no tengo problemas, sino en lo q describí mucho mas arriba)

Alguien me podria decir en donde tengo el error???, xq en los demos de las paginas se vé que funcionan bien, pero no se xq a mi me pasa eso.

GRACIAS!!
__________________
Y Sócrates dijo...Solo sé que no sé nada.
Entiende la filosofía como una búsqueda colectiva basada en el diálogo.
  #2 (permalink)  
Antiguo 07/10/2014, 11:44
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 11 años, 4 meses
Puntos: 379
Respuesta: Contador de user online me reescribe archivo

No es correcto el modo que estas usando para abrir el archivo en esta linea:
Código PHP:
Ver original
  1. //write file
  2. $fp = fopen($dataFile, "w+");

Revisa la documentación en el apartado "mode": http://php.net/manual/es/function.fopen.php
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #3 (permalink)  
Antiguo 07/10/2014, 16:07
Avatar de alette666  
Fecha de Ingreso: febrero-2010
Ubicación: En la luna
Mensajes: 277
Antigüedad: 14 años, 9 meses
Puntos: 5
Respuesta: Contador de user online me reescribe archivo

Cita:
Iniciado por hhs Ver Mensaje
No es correcto el modo que estas usando para abrir el archivo en esta linea:
Código PHP:
Ver original
  1. //write file
  2. $fp = fopen($dataFile, "w+");

Revisa la documentación en el apartado "mode": http://php.net/manual/es/function.fopen.php
Dices cambiarlo para q sitúe el puntero al final???
__________________
Y Sócrates dijo...Solo sé que no sé nada.
Entiende la filosofía como una búsqueda colectiva basada en el diálogo.
  #4 (permalink)  
Antiguo 07/10/2014, 16:38
Avatar de alette666  
Fecha de Ingreso: febrero-2010
Ubicación: En la luna
Mensajes: 277
Antigüedad: 14 años, 9 meses
Puntos: 5
Respuesta: Contador de user online me reescribe archivo

Cita:
Iniciado por hhs Ver Mensaje
No es correcto el modo que estas usando para abrir el archivo en esta linea:
Código PHP:
Ver original
  1. //write file
  2. $fp = fopen($dataFile, "w+");

Revisa la documentación en el apartado "mode": http://php.net/manual/es/function.fopen.php
Dices cambiarlo para q sitúe el puntero al final???

Creo que ahora si (lo edite en un php nuevo con un txt comun, creo q era la "w+" por "a"
__________________
Y Sócrates dijo...Solo sé que no sé nada.
Entiende la filosofía como una búsqueda colectiva basada en el diálogo.
  #5 (permalink)  
Antiguo 07/10/2014, 19:52
Avatar de alette666  
Fecha de Ingreso: febrero-2010
Ubicación: En la luna
Mensajes: 277
Antigüedad: 14 años, 9 meses
Puntos: 5
Respuesta: Contador de user online me reescribe archivo

Cita:
Iniciado por hhs Ver Mensaje
No es correcto el modo que estas usando para abrir el archivo en esta linea:
Código PHP:
Ver original
  1. //write file
  2. $fp = fopen($dataFile, "w+");

Revisa la documentación en el apartado "mode": http://php.net/manual/es/function.fopen.php
hice el intento de modificar "W+" por "A", ahora lo cual me agrega uno abajo de otro, pero.... me agrega la misma IP cada vez q el usuario refresca la pagina y no me hace la IP unica (parece un contador de visitas y no un contador de usuarios online :(
__________________
Y Sócrates dijo...Solo sé que no sé nada.
Entiende la filosofía como una búsqueda colectiva basada en el diálogo.

Etiquetas: contador, php+archivos, usuariosphp
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 18:40.