Problema con usar contador txt

Esta vez les consulto algo.. Ya programe mi web casi un 100% pero el problema es que mi contador usar cookies y un archivo de texto.. Pero el cual no se por que se reinicia. Ya estuve con casi mil y se reinicio lo tuve que poner de nuevo a casi la misma cantidad. Ahora estuve con más de 2 mil y se reinicio entre a mi web y otra vez estaba en 13 visitas.. Leí por algún foro que hay una forma de evitar que cuando entren dos usuarios al mismo tiempo y traten de escribir el archivo de texto no se dañe dicho archivo.. Y creo que ese es mi problema. Aquí les dejo mi código:

¿

¿

<?php
$archivo = "contador.txt";
if(file_exists($archivo)){
$contador = file_get_contents($archivo);
$yaHasEstadoAqui = $_COOKIE['ya'];
if (!$yaHasEstadoAqui)$contador ++;
}else{
touch($archivo);
chmod($archivo, 0755);
$contador = 1;
}
setcookie ("ya","1", time() + 3600);
file_put_contents($archivo, $contador);
?>

<table width="70" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<?php
$numero[0]="counter/0.gif";
$numero[1]="counter/1.gif";
$numero[2]="counter/2.gif";
$numero[3]="counter/3.gif";
$numero[4]="counter/4.gif";
$numero[5]="counter/5.gif";
$numero[6]="counter/6.gif";
$numero[7]="counter/7.gif";
$numero[8]="counter/8.gif";
$numero[9]="counter/9.gif";
$longitud = strlen ($contador);
$hasta = 6-$longitud;

For ($celda = 1;$celda <= $hasta;$celda++)
{
echo "<td width=\"17\" height=\"28\" valign=\"top\"><div align=\"center\"><img src=\"$numero[0]\"></div></td>";
}
$hasta = $longitud-1;
For ($celda = 0;$celda <= $hasta;$celda++)
{
$num = substr ($contador, $celda, 1);
echo "<td width=\"17\" height=\"28\" valign=\"top\"><div align=\"center\"><img src=\"$numero[$num]\"></div></td>";
}
?>
</tr>
</table>

La primera parte crea y revisa la cookie en la segunda parte usa imágenes con el numero de visitas. Díganme por favor que puedo hacer para evitar dañar el archivo contador.txt

Respuesta
3

Coincide con el amigo SevillaCode ''' y dejaría de lado la idea actual que solo te va a traer problema (sobretodo con las cookies).

Te recomiendo encarecidamente que uses Google Analytics ya que no solo te registrar las visitas si no también te da métricas del tiempo de visita, historial de navegación, tecnología usada por el usuario para visitar tu web y un sinfín más de información de gran utilidad.

Además configurarlo es tan sencillo como crearse una cuenta de Google (si no tienes una ya) aquí:

http://www.google.com/analytics/ 

Y pegar un código javascript en la cabecera de tu página.

Incluso si lo del contador lo quieres para mostrarlo a tus visitantes en tu web puedes hacer un sencillo script que lea de la API de Analytics o buscar uno de los muchos scripts de terceros (como este: https://gist.github.com/mtowers/5986576 )

1 respuesta más de otro experto

Respuesta
1

En este caso yo abandonaría la idea del archivo, y lo controlaría en base de datos, haciendo lo mismo que haces en el fichero. De esta manera te evitaras problemas de escritura paralela que comentas.

El detalle es que ya tengo cuenta en google analytic.. pero no se como mostrarlo en mi web.ya que me interesa que los visitantes vean las visitas y que también use las imágenes.. tuve un contador en base de datos pero no con imágenes..¿tendrán algo así por ahí?

Pues una vez tengas el nº de visitas sacado de analytics, que me parece una opcion mejor todavia si ibas a integrar este en tu web, la tranformación de nº a imagen es algo trivial.

Podria hacerse por ejemplo asi:

¿

¿
<?php
$num_visitas = (string)1349765;
$img_contador = '';
for($r=0;$r<strlen($num_visitas);++$r){
    $img_contador .= '<img src="counter/'.$num_visitas[$r].'.gif" alt="">';
} 
echo $img_contador;
?>

He usado la ruta que indicabas antes así que debe funcionarte esa parte, lo único cambia el $num_visitas por tu resultado de analytics.

Eso si, como ves hay que transformarlo en string para que mi solución te funcione. Recuerda que una cadena es considerada como un array de caracteres, y aprovechando esto hemos montado de manera sencilla el contador de visitas con imágenes.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas