elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Tutorial básico de Quickjs


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP (Moderador: #!drvy)
| | | |-+  Problema con este contador
0 Usuarios y 2 Visitantes están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Problema con este contador  (Leído 5,660 veces)
Crash_RPM

Desconectado Desconectado

Mensajes: 164


Ver Perfil
Problema con este contador
« en: 18 Junio 2012, 16:36 pm »

Estoy intentando arreglar el contador, porque el contador cuenta bien pero el problema es que cuando se le va la pinza le da por bajar las visitas de un dia para otro, llego a las 100.000 y pico y se bajo a 30.000. A ver si alguien sabe porque pasa esto, y ademas me gustaria hacer que cuente visitas pero por ip o algo porque cuenta por cada clic en la pagina.

En el index.php

Código:
<div id="contador">
                   <span class='negrita'><?php
                        $contador = file('contador.txt');
                        foreach ($contador as $linea)
                            echo $linea;

                    ?> </span>visitas
                </div>

Otro archivo que no se en que momento lo llama, contador_visitas.php

Código:
<?php

//Leo el contador y lo cierro sin escribirlo para que se vacie
        $filename = 'contador.txt';
        $archivo = fopen($filename, 'r+');
        $cont = fread($archivo,20);
        fclose($archivo);

        $cont =$cont+1;

        //Escribo en el contador el valor guardado, +1
        $archivo = fopen($filename, 'w+');
        fwrite($archivo, $cont);
                fclose($archivo);
?>


En línea

#!drvy
Moderador
***
Desconectado Desconectado

Mensajes: 5.856



Ver Perfil WWW
Re: Problema con este contador
« Respuesta #1 en: 18 Junio 2012, 17:05 pm »

Asi a simple vista.. el fallo que le veo es que le indicas que lea solo 20 bytes del archivo contador.txt

La linea en cuestión es la que aparece en amarillo
Código
  1. <?php
  2. //Leo el contador y lo cierro sin escribirlo para que se vacie
  3.        $filename = 'contador.txt';
  4.        $archivo = fopen($filename, 'r+');
  5.        $cont = fread($archivo,20);
  6.        fclose($archivo);
  7.  
  8.        $cont =$cont+1;
  9.  
  10.        //Escribo en el contador el valor guardado, +1
  11.        $archivo = fopen($filename, 'w+');
  12.        fwrite($archivo, $cont);
  13.                fclose($archivo);
  14. ?>

Puedes simplificarlo algo..

Código
  1. <?php
  2. function contador(){
  3.  // Nombre del archivo
  4.  $archivo = 'visitas.txt';
  5.  // Obtenemos el contenido del archivo
  6.  $visitas = file_get_contents($archivo);
  7.  // Incrementamos el numero de visitas por 1
  8.  (int)$visitas++;
  9.  // Lo guardamos en el archivo
  10.  $handle  = fopen($archivo,'w');
  11.  fwrite($handle,$visitas);
  12.  fclose($handle);
  13.  // Devolvemos las visitas
  14.  return $visitas;
  15. }
  16. ?>

Luego en el index.php lo llamas así:

Código
  1. <div id="contador">
  2.  <span class='negrita'>
  3.  <?php
  4.    // incluimos el archivo contador_visitas.php
  5.    include_once('contador_visitas.php');
  6.    // Imprimimos numero de visitas.
  7.    echo contador();
  8.   ?>
  9.  </span>visitas
  10. </div>



Lo de visitas únicas.. generalmente se suele hacer con bases de datos o archivos en los que se guardan las IP's de los usuarios y luego se comprueban por si existen.. pero con puro fopen es mucho lio. Quizás te interese hacer algo sencillo como poner una cookie al visitante y identificarle por 24 horas y luego volver a contarla..

Ejemplo:
Código
  1. <?php
  2. function contador(){
  3.  // Nombre del archivo
  4.  $archivo = 'visitas.txt';
  5.  // Obtenemos el contenido del archivo.
  6.  $visitas = file_get_contents($archivo);
  7.  // Si NO tiene una cookie llamada visita
  8.  if(empty($_COOKIE['visita'])){
  9.    // Incrementamos el numero de visitas por 1
  10.    (int)$visitas++;
  11.    // Lo guardamos en el archivo.
  12.    $handle  = fopen($archivo,'w');
  13.    fwrite($handle,$visitas);
  14.    fclose($handle);
  15.    // Ponemos la cookie con nombre: visita por 24 horas.
  16.    @setcookie('visita',true,time()+86400);
  17.  }
  18.  // Devolvemos visitas
  19.  return $visitas;
  20. }
  21. ?>


Saludos


« Última modificación: 18 Junio 2012, 17:07 pm por drvy | BSM » En línea

Crash_RPM

Desconectado Desconectado

Mensajes: 164


Ver Perfil
Re: Problema con este contador
« Respuesta #2 en: 19 Junio 2012, 12:46 pm »

He probado el codigo y si me suma bien, lo unico que no me hace las visitas unicas, yo creo que es algo de las cookies que no las crea bien, porque he probado el mismo codigo en un archivo php que he creado en mi ordenador y accediendo desde localhost si me funciona perfectamente.

El archivo que he creado en el ordenador he puesto todo el codigo en un mismo archivo la funcion contador y la llamada, tiene algo que ver?
En línea

Crash_RPM

Desconectado Desconectado

Mensajes: 164


Ver Perfil
Re: Problema con este contador
« Respuesta #3 en: 19 Junio 2012, 15:06 pm »

Lo mismo no lo estoy poniendo bien en el index y eso afecta al setcookie.

En el index.php, dentro del body he puesto:

Código:
<div id="contador">
                   <span class='negrita'>
  <?php
     // incluimos el archivo contador_visitas.php
     require_once(LIBRARY_PATH . "/contador_visitas.php");
     // Imprimimos numero de visitas.
     echo contador();
   ?>  
                    </span>
</div>

En el contador_visitas.php que esta dentro de la carpeta resources/library:

Código:
<?php
function contador(){
   // Nombre del archivo
   $archivo = 'contador.txt';
   // Obtenemos el contenido del archivo.
   $visitas = file_get_contents($archivo);
   // Si NO tiene una cookie llamada visita
   if(empty($_COOKIE['visita'])){
     // Incrementamos el numero de visitas por 1
     (int)$visitas++;
     // Lo guardamos en el archivo.
     $handle  = fopen($archivo,'w');
     fwrite($handle,$visitas);
     fclose($handle);
     // Ponemos la cookie con nombre: visita por 24 horas.
     @setcookie('visita',true,time()+86400);
   }
   // Devolvemos visitas
   return $visitas;
}
?>

Sin embargo en el que me he creado de prueba he metido en el body la funcion contador y cuando termina la funcion el echo contador(); y funciona perfectamente.
« Última modificación: 19 Junio 2012, 15:07 pm por Crash_RPM » En línea

Crash_RPM

Desconectado Desconectado

Mensajes: 164


Ver Perfil
Re: Problema con este contador
« Respuesta #4 en: 20 Junio 2012, 13:59 pm »

Para asegurarme si era por el index, he cojido el php que cree con solo el contador, que si me funcionaba desde localhost, y lo he subido al dominio y hay ya no hace la funcion de visitas reales, cuenta todas las visitas.

¿Donde puede estar el problema? ¿A alguien le ha pasado esto?

Lo mismo es a mi el que no me cuenta como visitas reales, pero seria raro que desde localhost si lo hiciese y desde el dominio no.
« Última modificación: 19 Noviembre 2012, 15:03 pm por Crash_RPM » En línea

#!drvy
Moderador
***
Desconectado Desconectado

Mensajes: 5.856



Ver Perfil WWW
Re: Problema con este contador
« Respuesta #5 en: 20 Junio 2012, 15:54 pm »

Código
  1. @setcookie('visita','blabla',time()+86400);

De esa linea quita la @, así te marcara los errores en caso de que los haya.

Quizas es problema del server.


Saludos
En línea

Crash_RPM

Desconectado Desconectado

Mensajes: 164


Ver Perfil
Re: Problema con este contador
« Respuesta #6 en: 20 Junio 2012, 16:01 pm »

Se la he quitado pero no me marca ningun error, si es problema del server hay algo que se pueda hacer? O solo me quedaria hacer el contador con base de datos?

He estado probando y creo que el problema es del setcookie que no me crea la cookie o lo que sea. He estado buscando un poco y he visto esto "setcookie php falla en php5". ¿Podria ser por esto?
« Última modificación: 20 Junio 2012, 16:19 pm por Crash_RPM » En línea

#!drvy
Moderador
***
Desconectado Desconectado

Mensajes: 5.856



Ver Perfil WWW
Re: Problema con este contador
« Respuesta #7 en: 20 Junio 2012, 17:09 pm »

Hombre, no hace falta base de datos.. pero es menos complicación yo creo. Puedes hacerlo con un fichero que guarde las IP's y compruebe si existen para una futura visita.

Ejemplo:
Código
  1. <?php
  2. function contador(){
  3.  // Nombre del archivo
  4.  $fichero = 'visitas.txt';
  5.  // Leemos el contenido del fichero
  6.  $handle = fopen($fichero,'r');
  7.  $contenido = fread($handle,filesize($fichero));
  8.  fclose($handle);
  9.  // Separamos visitas de visitas unicas y de las IP's
  10.  $visitas = explode("@",$contenido);
  11.  // Obtenemos la IP del usuario
  12.  $ipU = $_SERVER['REMOTE_ADDR'];
  13.  // Si NO encontramos la IP añadimos visita unica.
  14.  // y Añadimos la ip del usuario
  15.  if(!stristr($visitas[2],$ipU)){
  16.    $visitas[1]++;
  17.    $visitas[2] .= $ipU."|";
  18.  }
  19.  // Añadimos visita por pagina
  20.  $visitas[0]++;
  21.  // Volvemos a guardar el archivo.
  22.  $handle  = fopen($fichero,'w');
  23.  fwrite($handle,$visitas[0]."@".$visitas[1]."@".$visitas[2]);
  24.  fclose($handle);
  25.  // Me limpio de lo feo que soy.
  26.  unset($contenido);
  27.  // Devolvemos las visitas unicas y visitas por pagina
  28.  $visita['pagina'] = $visitas[0];
  29.  $visita['unicas'] = $visitas[1];
  30.  return $visita;
  31. }
  32.  
  33. $visitas = contador();
  34. echo 'Visitas: '.$visitas['pagina'];
  35. echo '<br />';
  36. echo 'Visitas unicas: '.$visitas['unicas'];
  37. ?>

Devolvería algo así:
Código
  1. Visitas: 42
  2. Visitas unicas: 2

PD: La primera vez te dará error porque el fichero estará vació, pero luego ya seguirá ejecutándose normalmente.

Saludos
En línea

Crash_RPM

Desconectado Desconectado

Mensajes: 164


Ver Perfil
Re: Problema con este contador
« Respuesta #8 en: 22 Junio 2012, 15:00 pm »

El Setcookie me han dicho que no me funciona por la configuracion del php.ini de mi servidor, he estado buscando la opcion que tengo que cambiar del php.ini para que funcione pero no lo encuentro, ¿alguien sabe como configurar el php.ini para que funcione las cookies bien?

drvy gracias por el nuevo contador, me gustaba la idea de las cookies pero si no me va a funcionar probare este nuevo, muchas gracias.
En línea

#!drvy
Moderador
***
Desconectado Desconectado

Mensajes: 5.856



Ver Perfil WWW
Re: Problema con este contador
« Respuesta #9 en: 22 Junio 2012, 15:17 pm »

Hola,

Que yo sepa, setcookie() no tiene nada que ver con php.ini.

Puedes decirme que te imprime este script en el servidor que usas ?

Código
  1. <?php
  2. if(function_exists('setcookie')){echo 'Existe';}else{echo 'No existe';}
  3. echo '<br />';
  4. setcookie("Prueba", '123');
  5. if(isset($_COOKIE['Prueba'])){echo 'Cookie definida.';}else {echo 'Cookie no definida';}
  6.  

PD: La primera vez te debería dar "Existe y no definida". Recarga la pagina y te debería dar "existe y definida".
Saludos
« Última modificación: 22 Junio 2012, 15:19 pm por drvy | BSM » En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema contador en C « 1 2 3 »
Programación C/C++
People95 22 9,722 Último mensaje 4 Marzo 2014, 04:26 am
por leosansan
Como hackear este contador?
Programación General
boxccs 2 2,030 Último mensaje 21 Mayo 2014, 01:29 am
por boxccs
Problema con contador, displays de 7 segmentos
ASM
dragonlady 0 2,334 Último mensaje 21 Junio 2015, 20:07 pm
por dragonlady
Problema contador python
Scripting
runas3 6 4,868 Último mensaje 1 Junio 2017, 12:53 pm
por runas3
Problema con contador en batch.
Scripting
Ezko 2 4,416 Último mensaje 11 Mayo 2018, 18:58 pm
por Ezko
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines