Autor
|
Tema: Problema con este contador (Leído 5,660 veces)
|
Crash_RPM
Desconectado
Mensajes: 164
|
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 <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 <?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
|
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 <?php //Leo el contador y lo cierro sin escribirlo para que se vacie $filename = 'contador.txt'; $archivo = fopen($filename, 'r+'); $cont = fread($archivo,20); $cont =$cont+1; //Escribo en el contador el valor guardado, +1 $archivo = fopen($filename, 'w+'); ?>
Puedes simplificarlo algo.. <?php function contador(){ // Nombre del archivo $archivo = 'visitas.txt'; // Obtenemos el contenido del archivo // Incrementamos el numero de visitas por 1 (int)$visitas++; // Lo guardamos en el archivo $handle = fopen($archivo,'w'); // Devolvemos las visitas return $visitas; } ?>
Luego en el index.php lo llamas así: <?php // incluimos el archivo contador_visitas.php include_once('contador_visitas.php'); // Imprimimos numero de visitas. echo contador(); ?>
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: <?php function contador(){ // Nombre del archivo $archivo = 'visitas.txt'; // Obtenemos el contenido del 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'); // Ponemos la cookie con nombre: visita por 24 horas. } // Devolvemos visitas return $visitas; } ?>
Saludos
|
|
« Última modificación: 18 Junio 2012, 17:07 pm por drvy | BSM »
|
En línea
|
|
|
|
Crash_RPM
Desconectado
Mensajes: 164
|
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
Mensajes: 164
|
Lo mismo no lo estoy poniendo bien en el index y eso afecta al setcookie. En el index.php, dentro del body he puesto: <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: <?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
Mensajes: 164
|
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
|
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
Mensajes: 164
|
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
|
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: <?php function contador(){ // Nombre del archivo $fichero = 'visitas.txt'; // Leemos el contenido del fichero $handle = fopen($fichero,'r'); // Separamos visitas de visitas unicas y de las IP's $visitas = explode("@",$contenido); // Obtenemos la IP del usuario $ipU = $_SERVER['REMOTE_ADDR']; // Si NO encontramos la IP añadimos visita unica. // y Añadimos la ip del usuario $visitas[1]++; $visitas[2] .= $ipU."|"; } // Añadimos visita por pagina $visitas[0]++; // Volvemos a guardar el archivo. $handle = fopen($fichero,'w'); fwrite($handle,$visitas[0]."@".$visitas[1]."@".$visitas[2]); // Me limpio de lo feo que soy. // Devolvemos las visitas unicas y visitas por pagina $visita['pagina'] = $visitas[0]; $visita['unicas'] = $visitas[1]; return $visita; } $visitas = contador(); echo 'Visitas: '.$visitas['pagina']; echo '<br />'; echo 'Visitas unicas: '.$visitas['unicas']; ?>
Devolvería algo así: Visitas: 42 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
Mensajes: 164
|
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
|
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 ? <?php echo '<br />'; if(isset($_COOKIE['Prueba'])){echo 'Cookie definida.';}else {echo 'Cookie no definida';}
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
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Problema contador en C
« 1 2 3 »
Programación C/C++
|
People95
|
22
|
9,722
|
4 Marzo 2014, 04:26 am
por leosansan
|
|
|
Como hackear este contador?
Programación General
|
boxccs
|
2
|
2,030
|
21 Mayo 2014, 01:29 am
por boxccs
|
|
|
Problema con contador, displays de 7 segmentos
ASM
|
dragonlady
|
0
|
2,334
|
21 Junio 2015, 20:07 pm
por dragonlady
|
|
|
Problema contador python
Scripting
|
runas3
|
6
|
4,868
|
1 Junio 2017, 12:53 pm
por runas3
|
|
|
Problema con contador en batch.
Scripting
|
Ezko
|
2
|
4,416
|
11 Mayo 2018, 18:58 pm
por Ezko
|
|