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:
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
Espero sea de utilidad.
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