Foros del Web » Programando para Internet » PHP »

contador de visitas con control por ip y fecha

Estas en el tema de contador de visitas con control por ip y fecha en el foro de PHP en Foros del Web. Buenas, A ver si alguien me puede ayudar. He hecho un código juntando varios que he encontrado y lo he intentado modificar para adaptarlo. Debería ...
  #1 (permalink)  
Antiguo 20/09/2010, 17:10
 
Fecha de Ingreso: mayo-2010
Mensajes: 51
Antigüedad: 13 años, 10 meses
Puntos: 0
contador de visitas con control por ip y fecha

Buenas,
A ver si alguien me puede ayudar.
He hecho un código juntando varios que he encontrado y lo he intentado modificar para adaptarlo.
Debería comprobarse primero si el día de hoy coincide con la fecha que hay en la primera linea del archivo "ip.txt". Si no coinciden significa que ha cambiado de día y se borrará todo el archivo y pondrá en la primera linea del "ip.txt" la nueva fecha.
Luego comprobará si la IP del usuario que entra en la web está guardado en ese archivo. Si entra por primera vez en ese día no se encontrará y guardará la IP en la siguiente linea del archivo de texto. En el caso contrario la IP sí se encontrará en el archivo y no la añadirá.
Si añade la nueva IP al archivo debería abrir otro archivo llamado "contador.txt" donde le sumará 1 a la cifra que ya exista en ese archivo, sumando así una visita a la página.
El total de visitas se imprimirá en pantalla.

Este es el código que tengo pero no me imprime el total de visitas:
Código PHP:
<?php
$dia_actual
=date("d");
$mes_actual=date("m");
$anio_actual=date("Y");
$fecha_actual=($anio_actual."/".$mes_actual."/".$dia_actual."\r\n");

$ip $_SERVER['REMOTE_ADDR'];
$archivo file("ip.txt");
$lineas count($archivo);
for(
$i=0$i $lineas$i++){
}
 if ((
$archivo[0])!=($fecha_actual)){ //si ha cambiado de dia borro las ip
 
echo "Diferentes y borrados!";
     
$ff fopen("ip.txt","w+");
     
fwrite($ff,"");
    
fclose($ff); 
     
$ff fopen("ip.txt","w+");
     
fwrite($ff,$fecha_actual);
    
fclose($ff); 
 }else{
 
$existe 0;
$visitas 0;
$fp fopen("ip.txt","r"); 
while(
$ip2 fgets($fp)){
    
$visitas++;
    
$ips .= $ip2;
    if(
$ip.'' == $ip2)$existe 1;
}
fclose($fp); 
if(
$existe == 0){
    
$fp fopen("ips.txt","a"); 
    
fwrite($fp$ip.''.$ips);
    
fclose($fp); 
    
$cont "contador.txt";
$abre fopen($cont"r");
$total fread($abrefilesize($cont));
fclose($abre);
$abre fopen($cont"w");
$total $total 1;
fwrite($abre$total);
fclose($abre);
}
}
print (
"Visitas: ".$total);
 
?>
Gracias de antemano.

Última edición por sToRaGe; 21/09/2010 a las 05:43
  #2 (permalink)  
Antiguo 21/09/2010, 06:48
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 13 años, 7 meses
Puntos: 331
Respuesta: contador de visitas con control por ip y fecha

En principio tu código funciona correctamente, genera los archivos y los saca por pantalla. Sólo tienes un warning de variable indefinida que puedes solucionar con
Código PHP:
$ips = (isset($ips)?$ips:0); 
Si no te funciona has de comprobar:

1. Si se crean los archivos.
2. En Linux, comprueba permisos en el directorio de trabajo.

No creo que tengas más problemas, en mi servidor funciona ok.
Espero que te sirva la pista, salu2
  #3 (permalink)  
Antiguo 21/09/2010, 08:07
 
Fecha de Ingreso: mayo-2010
Mensajes: 51
Antigüedad: 13 años, 10 meses
Puntos: 0
Respuesta: contador de visitas con control por ip y fecha

Acabo de probar eso que me has dicho repara2 pero no ha cambiado nada.
Había puesto 2 archivos diferentes para guardas las IP's, ahora he puesto sólo 1. El archivo "ip.txt" ya lo tengo creado.
El código está corriendo en hosting.

Aún así lo que hace es:
-Si las fechas no coinciden: borra el contenido del archivo y añade la nueva fecha, pero no muestra en pantalla el total de visitas. Simplemente pone "Visitas: ", pero sin el número.
-Si las fechas sí coinciden: en la siguiente linea pone la IP y la fecha, además lo hace aunque la IP ya exista en el ip.txt

Vuelvo a poner el código con la modificación que he hecho de los txt:

Código PHP:
Ver original
  1. <?php
  2. $dia_actual=date("d");
  3. $mes_actual=date("m");
  4. $anio_actual=date("Y");
  5. $fecha_actual=($anio_actual."/".$mes_actual."/".$dia_actual."\r\n");
  6.  
  7. $ip = $_SERVER['REMOTE_ADDR'];
  8. $archivo = file("ip.txt");
  9. $lineas = count($archivo);
  10. for($i=0; $i < $lineas; $i++){
  11. }
  12.  if (($archivo[0])!=($fecha_actual)){ //si ha cambiado de dia borro las ip
  13.  echo "Diferentes y borrados!";
  14.      $ff = fopen("ip.txt","w+");
  15.      fwrite($ff,"");
  16.     fclose($ff);
  17.      $ff = fopen("ip.txt","w+");
  18.      fwrite($ff,$fecha_actual);
  19.     fclose($ff);
  20.  }else{
  21.  
  22. $existe = 0;
  23. $visitas = 0;
  24. $fp = fopen("ip.txt","r");
  25. while($ip2 = fgets($fp)){
  26.     $visitas++;
  27.     $ip.= $ip2;
  28.     if($ip.'' == $ip2)$existe = 1;
  29. }
  30. fclose($fp);
  31. if($existe == 0){
  32.     $fp = fopen("ip.txt","a");
  33.     fwrite($fp, $ip);
  34.     fclose($fp);
  35.    
  36. $cont = "contador.txt";
  37. $abre = fopen($cont, "r");
  38. $total = fread($abre, filesize($cont));
  39. fclose($abre);
  40. $abre = fopen($cont, "w");
  41. $total = $total + 1;
  42. fwrite($abre, $total);
  43. fclose($abre);
  44. }
  45. }
  46. print ("Visitas: ".$total);
  47.  ?>
  #4 (permalink)  
Antiguo 21/09/2010, 18:09
 
Fecha de Ingreso: mayo-2010
Mensajes: 51
Antigüedad: 13 años, 10 meses
Puntos: 0
Respuesta: contador de visitas con control por ip y fecha

He hecho algunos cambios más y he llegado a esto:

Código PHP:
Ver original
  1. <?php
  2. $dia_actual=date("d");
  3. $mes_actual=date("m");
  4. $anio_actual=date("Y");
  5. $fecha_actual=($anio_actual."/".$mes_actual."/".$dia_actual."\r\n");
  6. $control=0;
  7. $existe = 0;
  8.  
  9. $ip = $_SERVER['REMOTE_ADDR'];
  10. $archivo = file("ip.txt");
  11. $lineas = count($archivo);
  12. for($i=0; $i < $lineas; $i++){
  13. }
  14.  
  15.  if (($archivo[0])!=($fecha_actual)){ //si ha cambiado de dia borro las ip
  16.  echo "Diferentes y borrados!";
  17.      $ff = fopen("ip.txt","w+");
  18.      fwrite($ff,"");
  19.     fclose($ff);
  20.      $ff = fopen("ip.txt","w+");
  21.      fwrite($ff,$fecha_actual."\n\r");
  22.     fclose($ff);
  23. }
  24.  
  25. $fp = fopen("ip.txt","r");
  26. while(!feof($fp))
  27. {
  28. $leer_linea = fgets($fp);
  29. if($leer_linea == $ip)
  30. $existe=1;
  31. }
  32. fclose($fp);
  33.  
  34.  
  35. if($existe == 0){
  36.     $fa = fopen("ip.txt","a");
  37.     fwrite($fa, $ip."\n\r");
  38.     fclose($fa);
  39.    
  40. $cont = "contador.txt";
  41. $fc = fopen($cont, "r");
  42. $total = fread($fc, filesize($cont));
  43. fclose($fc);
  44. $fc = fopen($cont, "w");
  45. $total = $total + 1;
  46. fwrite($fc, $total);
  47.     print ("Visitas: ".$total);    
  48. fclose($fc);
  49.    
  50.  
  51. } else if($existe == 1){
  52. $cont = "contador.txt";
  53. $fc = fopen($cont, "r");
  54. $total = fread($fc, filesize($cont));
  55.     print ("Visitas: ".$total);    
  56. fclose($fc);
  57. }
  58.  
  59.  ?>

Creo que el error está en que no hace la búsqueda bien y/o no compara correctamente la IP del visitante con las IP's guardadas en "ip.txt".
¿Por favor alguien puede ayudarme?
  #5 (permalink)  
Antiguo 24/09/2010, 07:50
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 13 años, 7 meses
Puntos: 331
Respuesta: contador de visitas con control por ip y fecha

Veo que este tema no está muy activo.
Lamentablemente no he podido dedicarle mucho tiempo pero en mi máquina funciona.
Otra opción bastante más viable es hacerlo por Base de datos.
Es más efectivo y seguro. Si quieres probar, puedes utilizar esto
http://phpclasses.masbytes.es/package/6068-PHP-Keep-track-of-visitors-to-site-pages-in-MySQL.html

Si no, necesito un poco de tiempo para comprobar el código otra vez, saludos!

Etiquetas: contador, control, ip, visitas, fechas
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 10:43.