Ir al contenido principal

Contador de visitas para tu web

El siguiente script contabiliza visitas en una web generando un fichero .xml con las ips de los equipos que acceden pero sin repetir más de una conexión por día. El cometido es evitar contar múltiples accesos diarios de un mismo usuario obteniendo así resultados de distintas conexiones.
Consta de dos ficheros que pueden situarse en un mismo directorio (/contador/) y llamar a la función del primero desde la página de inicio (index.html) e imprimir el resultado del return de la función:

include('./contador/counter.php');
echo counterValue();

Como toda aplicación es susceptible de mejora, se puede agregar hora de conexión e incluso una gráfica que lea los datos obtenidos del .xml.
 
counter.php

<?php
function counterValue (){
    $today= date("dmy");
    $addnewday= True;
    $addnewip= True;
    $addcounter= False;
    $remoteip= $_SERVER['REMOTE_ADDR'];
    $file= './counter.xml';  
    $xml = new SimpleXMLElement($file, null, true);  
    $resultado = $xml->result[0];

    # recorre las etiquetas date
    foreach ($xml-> date as $day)
    {
        # busca la fecha de hoy
        if ($day['name']==$today) 
        {
            $addnewday=False;

            # comprueba si ip registrada hoy
            foreach ($day->ip as $eachip){

                if ($day->ip==$remoteip){
                    $addnewip=False;
                }
            }

            # alamacena ip     
            if ($addnewip){
                $addIp= $day->addChild('ip', $remoteip);
                $xml->asXML($file);    
                $addcounter= True;    
            }
        }
    }

    # si no aparece la fecha de hoy agrega fecha e ip
    if ($addnewday){
        $addDay= $xml->addChild('date');
        $addDay->addAttribute('name', $today);
        $addIp= $addDay->addChild('ip', $remoteip);    
        $xml->asXML($file);    
        $addcounter= True;
    }

    if ($addcounter){
        $xml->result[0]=$resultado+1;
        $xml->asXML($file);
    }

   return $resultado;
}
?>
counter.xml
<?xml version="1.0" encoding="UTF-8"?>
<counter>
   <result>17</result>
   <date name="191112">
      <ip>192.168.10.78</ip>
   </date>
   <date name="201112">
      <ip>192.168.10.78</ip>
      <ip>192.168.10.15</ip> 
   </date>
   <date name="211112">
      <ip>192.168.10.78</ip>
      <ip>192.168.10.12</ip> 
</date> 
</counter>
El fichero .xml es un fichero de ejemplo en el que se puede eliminar todas las etiquetas <date name="xxxxxx"> y asignar a la etiqueta <result> un valor de inicio. La etiqueta <result> almacena la variable $resultado aunque se puede sobrescribir con el método count de la clase SimpleXMLElement. Para cada día se genera una etiqueta <date name="xxxxxx"> y dentro de ella la etiqueta <ip> que almacena las ips no repetidas.
Espero sea de utilidad.

Comentarios

Unknown ha dicho que…
Muy bueno, muchas gracias por compartirlo, estaba buscando esto. Seguramente lo modifique para que ponga la cantidad de visitas al mes, la cantidad de ips diferentes en el mes. Y despues voy ver si puedo hacer algun gráfico con los datos. Soy novato asi que me puede llevar meses je. Suerte.

Entradas populares de este blog

Servir aplicación Django con Cherokee

Estos son los pasos que he seguido para servir una aplicación Django en un servidor Cherokee con el módulo WSIGI . He usado este servidor de aplicaciones porque es más rápido y libiano que Apache. En este caso, he virtualizado un Ubuntu-sever con VirtualBox , por lo que parto de una instalación "pelada" del sistema operativo. Durante la instalación de la máquina virtual, el único paquete que he instalado ha sido el ssh-server, para evitar que me instale cualquier servidor que pueda confrontar con el cherokee. Después de actualizar el sistema operativo, he instalado los siguientes paquetes. Es importante señalar que estos comandos instalará los paquetes con la última release, lo que puede provocar incompatibilidades con la aplicación desarrollada. De ser necesaria alguna versión concreta, será necesario descargarlo e instalarlo a mano con las instrucciones del programador. Django: https://www.djangoproject.com/download/ Cherokee: http://www.cherokee-project.com/d...

Configurando XBEE

Ambos Xbee se configura en modo end point o nodo, es decir, ninguno es concentrador, lo que permite una comunicación bidireccional y sin esperas. Comandos AT: ATID -> Corresponde al PanId o el número que engloba todos los dispositivos XBee de una misma red. ATMY -> Es el valor individual para cada nodo. ATDL -> Indica el número de nodo destino. ATCE -> Tiene valor 1 o 0, dependiendo de si es concentrador o no. ATRE -> Restaura valores de fábrica. ATWR -> Almacena los valores de configuración en la memoria no volátil. ATCN -> Sale del modo configuración. ATBD -> Tasa de transmisión, por defecto 3= 9600. ATAP -> API Mode. (Enable: 1, Disable: 0) Ejecutar en un terminal la aplicación GtkTerm y configurar las siguientes opciones como muestra la figura seleccionando el ttyUSBx que corresponda: Una vez configurado, introducir +++ y obtener OK de parte del XBee, configurar el Xbee con los siguientes parámetros: ATID ATMY ATDH ATDL ATCE XB...

jquery

Selectores: $("#myDiv")-> Id $("div")-> etiqueta (div, span, h1) $(".myClass")-> mi class $("*")-> cualquier etiqueta $("div,span,p.myClass")-> otra posibildad   $("div: has (p)") --> contiene una etiquta dentro de otra. $("div: contains ('John')")--> etiqueta que contiene la palabra dada $("td: empty ") --> etiqueta vacía $("td: parent ") --> eiqueta padre, es decir los primeros td de cada tr Filtros Básicos: $("tr: first ") --> Encuentra el primer elemento $("tr: last ") --> Encuentra el último elemento $("tr: even ") --> uno sí-otro no $("tr: odd ") --> y viceversa $("tr: eq(índice) ") --> encuentra el índice $("tr: gt(índice) ") --> a contar a partir del índice $("tr: lt(índice) ") --> a contar hasta el índice Atributos de selección $("div[id]"). on...