Foros del Web » Programando para Internet » PHP »

Problema con contador

Estas en el tema de Problema con contador en el foro de PHP en Foros del Web. Hola, buenas tardes. Tengo un problema con el contador de entrada de una de mis páginas, cada vez con mas frecuencia el mismo se inicializa ...
  #1 (permalink)  
Antiguo 13/06/2013, 12:20
Avatar de Euclides64  
Fecha de Ingreso: octubre-2010
Mensajes: 79
Antigüedad: 14 años, 1 mes
Puntos: 2
Problema con contador

Hola, buenas tardes.
Tengo un problema con el contador de entrada de una de mis páginas, cada vez con mas frecuencia el mismo se inicializa y comienza por el 1.
Tras el código del contador he creado otro que me guarda en un fichero todas las IP de los visitantes y ocurre que los usuarios que las IP que me ponen el contador a cero corresponden a buscadores que posiblemente utilizando un programa robot visualizan 20 o 30 páginas de mi site en apenas unos segundos.
Seguidamente pongo el código que utilizo para el contador y agradecería cualquier sugerencia para evitar esta anomalía y si es posible para evitar que las entradas de estos buscadores no cuenten en mi contador de entradas.
El código es el siguiente:

Cita:
<?php
// C O N T A D O R
$destino = "contador.txt";
$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'>";
}
@fclose($abrir);
print $contador;

// V I S I T A N T E S
$destino = "visitantes.txt";
$abrir = fopen($destino,"a");
$ip = $_SERVER['REMOTE_ADDR']; //Captura la IP del visitante
$fechs_visita = date("j/m/y h:i"); //Captura la fecha de la vicita, dia,mes,año hora,minitos
$ip = $ip . " - " . $fechs_visita;
$ruta = $_SERVER['PHP_SELF']; //Captura el nombre de la página visitada
$fichero = basename($ruta);
$ip = $ip . " - " . $fichero . " - " . $cuenta;
@fputs($abrir,"$ip \n"); //Imprime los datos en el fichero visitantes .txt
@fclose($abrir); //Cierra el fichero
?>
Muy agradecido por vuestras sugerencias.
Saludos. Jesús B.
  #2 (permalink)  
Antiguo 14/06/2013, 00:58
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: Problema con contador

Para detectar bots y evitar que incrementen tu contador lee esto: http://www.forosdelweb.com/f18/clase...-bots-1051564/

Como no tienes un método para bloquear el acceso al archivo, cuando recibes dos o más visitantes al mismo tiempo, mientras uno está guardando y otro quiere (pero no puede) leer, es cuando se realiza el reinicio.

La mejor opción es, definitivamente, usar una base de datos para el contador, pero, si aún quieres seguir usando archivo de texto, te recomiendo usar flock() para bloquear/desbloquear, el proceso sería más o menos así:

Código PHP:
Ver original
  1. // Establecer un máximo de intentos para evitar ciclo infinito
  2. $max = 5;
  3. $tries = 0;
  4. while(!fopen('archivo', 'r+') && $tries < $max) {
  5.     $tries ++;
  6. }
  7. if($tries < $max) {
  8.     // Sí se pudo abrir el archivo
  9.     // Bloqueas con flock()
  10.     // Lees, incrementas
  11.     // Guardas el nuevo valor
  12.     // Cierras y desbloqueas el archivo
  13. } else {
  14.     // No se pudo abrir, no muestras el contador
  15. }
__________________
- León, Guanajuato
- GV-Foto
  #3 (permalink)  
Antiguo 14/06/2013, 03:08
Avatar de Euclides64  
Fecha de Ingreso: octubre-2010
Mensajes: 79
Antigüedad: 14 años, 1 mes
Puntos: 2
Respuesta: Problema con contador

Muchas gracias, me ha quedado todo aclarado, ahora a resolver.

Saludos. Jesús B.

Etiquetas: contador, usuarios
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:55.