Foros del Web » Programando para Internet » PHP »

El contador de visitas se pone a cero

Estas en el tema de El contador de visitas se pone a cero en el foro de PHP en Foros del Web. Hola, llevo con un contador de visitas muy simple que se pone inusualmente a cero, y ultimamente lo hace cada muy poco tiempo, no es ...
  #1 (permalink)  
Antiguo 11/10/2011, 01:39
 
Fecha de Ingreso: marzo-2010
Mensajes: 8
Antigüedad: 14 años, 7 meses
Puntos: 0
El contador de visitas se pone a cero

Hola, llevo con un contador de visitas muy simple que se pone inusualmente a cero, y ultimamente lo hace cada muy poco tiempo, no es muy fiable pero me da el pego, pero claro.....¿Sabe alguien de que puede ser? Gracias

$destino = "numero.dat";
$abrir = fopen($destino,"r");
$cuenta = trim(fread($abrir,filesize($destino)));


if ($cuenta != "") $cuenta++;
else $cuenta = 1;
@fclose($abrir);
$abrir = fopen($destino,"w");
@fputs($abrir,$cuenta);



for($i=0;$i<strlen($cuenta);$i++) {
$imagen = substr($cuenta,$i,1);
$contador .= "<img alt='$imagen ' src='$imagen.gif'></img>";
}
@fclose($abrir);
print $contador;
?>

Este es el codigo y el archivo numero.dat se me pone a cero ¿?¿¿?¿?, quien o como se cambia solo??
  #2 (permalink)  
Antiguo 11/10/2011, 04:18
Avatar de gogupe  
Fecha de Ingreso: octubre-2006
Ubicación: Mallorca
Mensajes: 897
Antigüedad: 18 años
Puntos: 32
Respuesta: El contador de visitas se pone a cero

El fallo lo tienes en "W", de este modo te sobrescribe el fichero, si pones "A" te coloca el cursor al final del archivo y no te borra nada.

Saludos.

EDIT: Acabo de leer bien tu problema y no es esta la solucion ;)

Bien, he probado tu código y la verdad es que a mi me funciona bien.

Lo que he cambiado, ya que me daba un error de que no existía el fichero es poner $abrir = fopen($destino,"r+"); (con el signo +) si no existe lo crea... salvo lo demás, está bien.
  #3 (permalink)  
Antiguo 11/10/2011, 15:22
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 16 años, 3 meses
Puntos: 2237
Respuesta: El contador de visitas se pone a cero

Suele pasar que si dos o mas usuarios visitan tu sitio al mismo tiempo al menos con uno de ellos no se puede abrir el archivo y se crea nuevamente... en cero, por lo que tendrias que bloquear el archivo mientras haces la actualizacion: flock()
__________________
- León, Guanajuato
- GV-Foto
  #4 (permalink)  
Antiguo 13/10/2011, 13:10
 
Fecha de Ingreso: marzo-2010
Mensajes: 8
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: El contador de visitas se pone a cero

Triby, que linea le tengo que añadir al codigo en este caso? Gracias
  #5 (permalink)  
Antiguo 14/10/2011, 17:20
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 16 años, 3 meses
Puntos: 2237
Respuesta: El contador de visitas se pone a cero

Ups, hace mucho hice un contador con archivos de texto, pero creo que en sitios de mucho trafico no es tan eficiente y podrias probar:

Código PHP:
Ver original
  1. $fcont = false;
  2. // ********** Read current total hits
  3. if(file_exists($datdir . $curcont . '.dat')) {
  4.     // ********** be sure to read the file so the counter will not be reseted
  5.     while(!$fcont) {
  6.         $fcont=@file($datdir . $curcont . '.dat');
  7.         $curnum=intval(trim($fcont[0]));    // ***** Read total hits as well
  8.     }
  9. } else {
  10.     // ********** Is the file missing?
  11.     $curnum=0;              // ***** Start counting from 0
  12. }
  13.  
  14. // ***** Increment counter by anything you've selected in it's configuration
  15. $curnum=$curnum+$aumenta;
  16.  
  17. // ***** Store the new total hits on file
  18. $chan=fopen($datdir . $curcont . '.dat', 'w');
  19. $canWrite=false;
  20. while (!$canWrite) {
  21.     $canWrite = flock($chan, LOCK_EX); // Bloqueamos el archivo para guardar el contador
  22. }
  23. fwrite($chan, $curnum);
  24. $canWrite = flock($chan, LOCK_UN);
  25. fclose($chan);

Nota: Esto lo hice en uno de mis primeros intentos por aprender PHP, ahora es mas facil guardar con file_put_contents('archivo', 'contenido', LOCK_EX); pero lo importante es tratar de leer el archivo si es que existe y esta bloqueado.
__________________
- León, Guanajuato
- GV-Foto

Etiquetas: archivo-txt, contador, contador-visitas, flock
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:39.