Ver Mensaje Individual
  #1 (permalink)  
Antiguo 24/05/2011, 06:49
tecnotron
 
Fecha de Ingreso: mayo-2009
Mensajes: 1
Antigüedad: 15 años, 6 meses
Puntos: 0
Información Un contador de usuarios en línea y páginas vistas

Me surgió la necesidad de un contador específico de usuarios en línea y páginas vistas para unas webs educativas de la ong ASOCAE, y no encontraba nada que cumpliese con mis necesidades.

Así que me dediqué a tomar lo mejor de cada uno de los contadores que iba encontrando por la red, y el resultado lo pongo a vuestra disposición con licencia GPL para que lo uséis si os gusta, o modifiquéis si os place.

Tengo una amplia explicación de su funcionamiento en los blogs de ASOCAE, cuyo enlace luego os pasaré, pero os dejo aquí lo fundamental por si os es suficiente:

El contador en cuestión es simple, en formato texto, pero muy rápido y funcional, que es lo que yo buscaba. Aquí tenéis una captura de pantalla de la cabecera de una de las webs donde está insertado, y una captura ampliada de la línea del contador:





Se trata de tres contadores en uno, en lenguaje php y utilizando archivos de texto en lugar de base de datos. El primero de los contadores muestra los usuarios únicos que están visitando la web, el segundo y tercero muestran las páginas vistas por día y por mes. Al finalizar el día y el mes, se restauran a cero y comienzan de nuevo.

Os dejos los códigos:

usuarios.php

Código:
<?php

//Obtenemos la IP del visitante y la hora actual.
$ip=$_SERVER['REMOTE_ADDR'];
$hora=time();
$existe=0;

//Tiempo que tardará en actualizarse el contador (60=1 minuto, 1800=media hora)
$sesion=$hora-1800;

$archivo=”contar_usuarios.dat”;
$ar=@file($archivo);

//Se abre el archivo de texto para eliminar ips expiradas y crear nuevo array con las vigentes.
//Se crea un buqle para recorrer el archivo y leer su contenido
foreach($ar as $pet){
 $ele=explode(“:”,$pet);
 $ai=trim($ele[1]);
 
 if(trim($ele[1]) == $ip && trim($ele[0]) > $sesion)
 {
   $existe=1;
 }
 if(trim($ele[0]) > $sesion)
 {
 $array[]=implode(“:”,$ele);
  }
}

//Se abre el archivo para guardar los datos nuevos.
//Se crea un buqle para recorrer el archivo y leer su contenido
$p=@fopen($archivo,”w+”);
if($existe == 0){
$array[]=$hora.”:”.$ip.”\n”;
}

foreach($array as $eoeo){
$grabar.=trim($eoeo).”\n”;
}

@fwrite($p,$grabar);
@fclose($p);

$con=@file($archivo);

//Se guarda en una variable el número de usuarios únicos visitando la web
$n_usuarios=count($con);

//Se muestran los datos formateados en color rojo
echo “<html>
<head>
<meta http-equiv=’Content-Type’ content=’text/html; charset=iso-8859-1′>
</head>
<body STYLE=’font-family: Arial, Helvetica, Sans Serif; font-size:12px;font-weight: bold;color:#FF0000′>
<div align=’left’><img border=’0′ src=’logo_useronline.gif’>
$n_usuarios usuarios en línea
</div>
</body>
</html>”;

?>
vistas.php

Código:
<?

//Se guardan en variables los nombres de archivo, día y mes
$fichcontmes = “contar_mes.dat”;
$fichdia = “dia.dat”;
$fichcontdia = “contar_dia.dat”;
$fichmes = “mes.dat”;
$arr=getdate();
$dia= $arr["mday"];
$mes= $arr["mon"];

//Se abre el archivo del día para leer su contenido. Si es no es el mismo, se añade el nuevo día.
//Si el día es el mismo, se suma 1 al contador
$abrir_dia = fopen($fichdia, “r+”);
$nuevo_dia = fgets($abrir_dia, 255);
fclose($abrir_dia);
if ($nuevo_dia != $dia)
{
$undia_mas = fopen($fichdia, “w”);
fputs($undia_mas, $dia);
fclose($undia_mas);
}

$visit_dia = fopen($fichcontdia, “r+”);
$suma_dia = fgets($visit_dia, 255);
$suma_dia++;

//Si el dia del archivo no es el mismo del sistema, se pone el contador a cero
if ($nuevo_dia != $dia)
{
fclose($visit_dia);
$dia_acero = fopen($fichcontdia, “w”);
fputs($dia_acero, “1″);
fclose($dia_acero);
}
else
{
fseek($visit_dia,SEEK_SET);
fputs($visit_dia, $suma_dia);
fclose($visit_dia);
}

//Este módulo es idéntico al del día de arriba, pero en este caso solo para el mes.
$abrir_mes = fopen($fichmes, “r+”);
$nuevo_mes = fgets($abrir_mes, 255);
fclose($abrir_mes);
if ($nuevo_mes != $mes)
{
$unmes_mas = fopen($fichmes, “w”);
fputs($unmes_mas, $mes);
fclose($unmes_mas);
}

$visit_mes = fopen($fichcontmes, “r+”);
$suma_mes = fgets($visit_mes, 255);
$suma_mes++;
if ($nuevo_mes != $mes)
{
fclose($visit_mes);
$mes_acero = fopen($fichcontmes, “w”);
fputs($mes_acero, “1″);
fclose($mes_acero);
}
else
{
fseek($visit_mes,SEEK_SET);
fputs($visit_mes, $suma_mes);
fclose($visit_mes);
}

//Se muestran los datos guardados formateados en color verde
echo “<html>
<head>
<meta http-equiv=’Content-Type’ content=’text/html; charset=iso-8859-1′>
</head>
<body STYLE=’font-family: Arial, Helvetica, Sans Serif; font-size:12px;font-weight: bold; color:#008000′>
<div align=’left’><img border=’0′ src=’logo_visitas.gif’>
Pág. vistas hoy: $suma_dia, Mes: $suma_mes
</div>
</body>
</html>”;

?>
Para visualizar los datos utilizo dos iframes:

Código:
<IFRAME SRC=’visitas/usuarios.php’ SCROLLING=’no’ allowtransparency=”true” NAME=’I1′ MARGINWIDTH=’0′ MARGINHEIGHT=’0′ WIDTH=’150′ HEIGHT=’20′ FRAMEBORDER=’no’>
</IFRAME>
<IFRAME SRC=’visitas/visitas.php’ SCROLLING=’no’ allowtransparency=”true” NAME=’I1′ MARGINWIDTH=’0′ MARGINHEIGHT=’0′ WIDTH=’240′ HEIGHT=’20′ FRAMEBORDER=’no’>
</IFRAME>
Tenéis más información en las siguientes entradas de los blogs de la asociación educativa ASOCAE:
http://www.mentesinquietas.es/blog/?p=593
http://www.cultureduca.com/reporteros/?p=283

Podéis ver este contador funcionando normalmente en las webs y blogs de ASOCAE, aquí tenéis un ejemplo:
http://www.natureduca.com/

Podéis descargar el script con todos sus archivos en formato zip, listo para funcionar, en el siguiente enlace

http://www.cultureduca.com/archivos_descarga/contador_asocae.zip

Para cualquier duda podéis contactar conmigo.

Saludos.

Última edición por tecnotron; 24/05/2011 a las 15:46