Este script, creará un mensaje en cualquier sitio de la página en el que se verán los usuarios que están visitando el sitio en un momento dado. Por otro lado, informará de las páginas vistas que se han producido durante el día de hoy.
En estos casos las necesidades eran más sencillas: consistía en un simple contador de los usuarios únicos que se encuentran en línea, y un contador que pudiese mostrar el número de páginas vistas durante el día y durante el mes. Y todo esto, sin florituras gráficas, mostrando los resultados con caracteres de texto y como mucho acompañados de un par de pequeños iconos identificativos.
Eso permitiría a los usuarios que visitan la web, hacer de un solo vistazo una evaluación de la popularidad del sitio, en base al número de usuarios y visualizaciones que se van registrando.
No obstante, nada de lo que encontré en Internet cumplía con estos requisitos al 100%. En unos casos se requerían base de datos, algo que me parecía excesivo para las pretensiones del contador; en otros casos se abusaba en el código de las llamadas al servidor, consumiendo excesivos recursos; y en ningún caso encontré algo que sirviese en conjunto a las tres necesidades planteadas (aunque sí abundaban muchos códigos por separado). Así que me dedique a tomar para mi diseño lo mejor de cada uno de los scripts que iba encontrando por la red.
Tras un periodo de pruebas de un mes en las webs y blogs de ASOCAE que considero satisfactorio, he decidido liberalo y ponerlo a disposición pública, mediante licencia GPL, para que lo uséis si os gusta, o lo modifiquéis según vuestras necesidades si os place.

El script está escrito en lenguaje PHP y para almacenar los datos contabilizados utiliza archivos de texto en lugar de base de datos. Son en realidad tres contadores en uno. El primero de ellos muestra los usuarios únicos que están visitando la web (se recurre a la captura de las IPS's y el momento exacto en segundos en que accedieron), el segundo y tercer contador muestra las páginas vistas por día y por mes, respectivamente. Al finalizar el día y/o el mes, se restauran a cero y comienzan de nuevo.
El script se aloja en el servidor dentro de una carpeta llamada "visitas" (abajo podéis acceder al enlace de la descarga). Tenéis que transferir al raíz del servidor la carpeta completa, y darle a ésta y todo su contenido permisos 777.
En el archivo para descarga, encontraréis una serie de archivos que podríais colocar en una carpeta llamada "visitas”. Contiene los siguientes archivos:
- usuarios.php (Script php que gestiona los usuarios únicos que están en linea)
contar_usuarios.dat (Archivo de texto donde se guardan los datos de los usuarios que están en línea)
- visitas.php (Script php que gestiona las visitas que se van recibiendo)
contar_dia.dat (Archivo de texto donde se guarda el número de visitas durante el día)
contar_mes.dat (Archivo de texto donde se guarda el número de visitas durante el mes)
- dia.dat (Archivo de texto donde se guarda el día de la fecha actual –del 1 al 31–)
- mes.dat (Archivo de texto donde se guarda el mes de la fecha actual –del 1 al 12–)
- logo_useronline.gif (icono de usuarios en línea)
- logo_visitas.gif (icono de las visualizaciones de página)
Por ser de especial interés para entender el funcionamiento de los scripts (para el que le interese conocer los entresijos de la programación que he realizado), os dejos los códigos de los dos scripts principales (usuarios.php y visitas.php), con sus comentarios:
usuarios.php
<?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>";
?>
visitas.php
<?php
//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 IFRAME:
<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>
El código de los IFRAME tenemos que insertarlos en todas las páginas que deseamos contabilizar, y situándolos allí donde nos interesa mostrar los resultados. Obviamente, si insertamos el código sólo en la página principal, será ésta la única página contabilizada.
Nota: cada desarrollador sabrá que método utilizar para que se contabilice el total de las páginas del sitio, ejemplo, insertando los IFRAME en un archivo único y llamándolo mediante un "include" PHP desde todas las páginas del sitio con algo como
<?php include("archivoquecontieneeliframe.php"); ?>
Podéis ver este contador funcionando normalmente en las webs y blogs de ASOCAE, por ejemplo http://www.natureduca.com/
Podéis descargar el script completo en formato zip, en el siguiente enlace.
Podéis contactar conmigo en caso de necesitar ayuda en la implementación.
| Sobre script Contador Usuarios o line Por: Amigo | 09/6/2011
|
| Sobre script Contador Usuarios online | 09/6/2011 |
| me tira el sig. error Por: savior | 16/6/2011
|
| codigo de visitas? Por: Edilson | 25/6/2011
|
| como eu faço? Por: Edilson | 27/6/2011
|
![]() hax_sx | Ayuda con este script !. | 26/12/2011 |