Ver Mensaje Individual
  #1 (permalink)  
Antiguo 07/10/2014, 11:14
Avatar de alette666
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.