Test Foro de elhacker.net SMF 2.1

Programación => Desarrollo Web => PHP => Mensaje iniciado por: Crash_RPM en 18 Junio 2012, 16:36 PM

Título: Problema con este contador
Publicado por: Crash_RPM 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

<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);
?>
Título: Re: Problema con este contador
Publicado por: #!drvy 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 (php,5) [Seleccionar]
<?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);
?>


Puedes simplificarlo algo..

Código (php) [Seleccionar]
<?php
function contador(){
  
// Nombre del archivo
  
$archivo 'visitas.txt';
  
// Obtenemos el contenido del archivo
  
$visitas file_get_contents($archivo);
  
// Incrementamos el numero de visitas por 1
  
(int)$visitas++;
  
// Lo guardamos en el archivo
  
$handle  fopen($archivo,'w');
  
fwrite($handle,$visitas);
  
fclose($handle);
  
// Devolvemos las visitas
  
return $visitas;
}
?>


Luego en el index.php lo llamas así:

Código (html4strict) [Seleccionar]
<div id="contador">
 <span class='negrita'>
 <?php 
    
// incluimos el archivo contador_visitas.php
    
include_once('contador_visitas.php'); 
    
// Imprimimos numero de visitas.
    
echo contador(); 
   
?>

 </span>visitas
</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 (php) [Seleccionar]
<?php
function contador(){
  
// Nombre del archivo
  
$archivo 'visitas.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;
}
?>



Saludos
Título: Re: Problema con este contador
Publicado por: Crash_RPM 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?
Título: Re: Problema con este contador
Publicado por: Crash_RPM 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:

<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.
Título: Re: Problema con este contador
Publicado por: Crash_RPM 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.
Título: Re: Problema con este contador
Publicado por: #!drvy en 20 Junio 2012, 15:54 PM
Código (php) [Seleccionar]
@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
Título: Re: Problema con este contador
Publicado por: Crash_RPM 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?
Título: Re: Problema con este contador
Publicado por: #!drvy 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 (php) [Seleccionar]
<?php
function contador(){
  
// Nombre del archivo
  
$fichero 'visitas.txt';
  
// Leemos el contenido del fichero
  
$handle fopen($fichero,'r');
  
$contenido fread($handle,filesize($fichero));
  
fclose($handle);
  
// 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
  
if(!stristr($visitas[2],$ipU)){
    
$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]);
  
fclose($handle);
  
// Me limpio de lo feo que soy.
  
unset($contenido);
  
// 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í:
Código (url) [Seleccionar]
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
Título: Re: Problema con este contador
Publicado por: Crash_RPM 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.
Título: Re: Problema con este contador
Publicado por: #!drvy 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 (php) [Seleccionar]
<?php
if(function_exists('setcookie')){echo 'Existe';}else{echo 'No existe';}
echo 
'<br />';
setcookie("Prueba"'123');
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
Título: Re: Problema con este contador
Publicado por: Crash_RPM en 22 Junio 2012, 15:31 PM
Recargo la pagina pero solo me pone:

Existe
Cookie no definida
Título: Re: Problema con este contador
Publicado por: #!drvy en 22 Junio 2012, 16:02 PM
Raro rawo rawo rawisimow xD


Quizás, quizás quizás... probemos definir al ruta de la cookie a ver si funciona.

Código (php) [Seleccionar]

<?php
setcookie
("BLABLABLA",'WTF',time()+3600'/');
echo 
'<pre>';
print_r($_COOKIE);
?>



Ábrela, recarga y te debería de salir una lista de cookies. Una de ellas se tiene que parecer a esto "[BLABLABLA] => WTF"

PD: Si sale, es que el servidor te obliga a poner ruta a la cookie.
PD: Si no sale, habla con el soporte técnico de tu servidor y diles que la han cagado con el setcookie(). xD

Saludos
Título: Re: Problema con este contador
Publicado por: Crash_RPM en 22 Junio 2012, 16:14 PM
Pues va a ser que el soporte tecnico la han cagado, recargo y me sale

Array
(
)

No salen las demas cookies porque he borrado las cookies antes de recargar ¿Tiene solucion? ¿Si le escribo un correo lo arreglarian? el servidor es Bluehost.

Si no pues pruebo ha hacer el otro contador que me has dicho, pero una duda ¿Que pasaria si entra un usuario con una ip y al dia siguiente entra con la misma ip porque no ha reiniciado el router? ¿No contaria dos visitas no?
Título: Re: Problema con este contador
Publicado por: #!drvy en 22 Junio 2012, 16:44 PM
Citar¿Si le escribo un correo lo arreglarian?
Pues deberían.. o al menos indicarte como hacerlo para que funcione.

Citar¿Que pasaria si entra un usuario con una ip y al dia siguiente entra con la misma ip porque no ha reiniciado el router? ¿No contaria dos visitas no??
Nop, teóricamente las visitas únicas son IP's únicas que han visitado tu pagina. Por tanto por muchas veces que la visite con la misma IP contara solo una.


Saludos
Título: Re: Problema con este contador
Publicado por: Crash_RPM en 26 Junio 2012, 00:44 AM
Muchas gracias por todo, he hablado con los de blue host  pero al parecer dicen que no es cosa de ellos, que sera el codigo que esta mal pero bueno... espero que solo sea el setcookie y no me falle en mas cosas.

Gracias y espero que estos contadores ya les sirva a otros usuarios.