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($fp, LOCK_SH);
while(!feof($fp)){
if(fgets($fp)){//*
$lineas++;//*
}
$users[] = rtrim(fgets($fp, 32));
}
flock($fp, LOCK_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($fp, LOCK_EX);
$i = 0;
foreach($users as $single){
if($single != ""){
fwrite($fp, $single . "\r\n");
$i++;
}
}
flock($fp, LOCK_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!!