Si eres de los que te gusta programar y mucho más aplicaciones para la web (webapp) con el lenguaje PHP, te habrás preguntado alguna vez si es posible crear tus propias trazas de ejecución de acciones, sin recurrir a los excelentes pero a veces cargados sistemas de generación de logs que ofrecen muchos frameworks y entornos de trabajo de hoy en día. Pues en este post te sugiero construir uno sencillo y que puedes adaptar a tus necesidades.
Antes que nada quiero dejar bien claro que lo que se entiende por una traza, no es más que un fichero de texto plano (generalmente) donde se relatan de forma sencilla las actividades que se están realizando (creo que también se les conoce como bitácoras), que luego son utilizadas por las personas o aplicaciones para procesarlas y generar estadísticas o cualquier otra información. En el caso que explicaré la información es para seres humanos, pero con unos pocos ajustes, se puede igualar al sistema de trazas de squid, apache o iptables.
En general este es el guión de un sistema de generación de trazas:
- Recolectar la información que mínima y necesaria para crear la traza.
- Procesar y obtener alguna información que se deduzca del anterior paso.
- Volcar (o sea guardar) en un fichero de texto plano los datos obtenidos y procesados.
Escenario:
Se desea registrar los accesos de los navegantes a un sitio. La información a guardar es:
- IP desde donde se accede.
- Página que visita.
- Navegador que utiliza para conectarse.
Nota 1: Todos estos datos se pueden obtener en los logs del servidor web donde esté montada la webapp, de forma que ante dudas pueden ser corroborados.
Nota 2: Según las buenas prácticas de programación sugieren, que cuando un proceso o funcionalidad es ejecutado muchas veces, lo mejor es separarlo en un segmento aparte dentro de la webapp para que su desempeño o lógica no afecte el correcto funcionamiento de la webapp.
Manos a la obra:
Lo primero es crear un fichero llamado util.php dentro de la webapp donde programaremos la funcionalidad que le llamaremos generaTraza.
// Ejemplo de código de util.php
<?php
function generaTraza($datos){
$ruta = “traza.log”;
$string = “Están navegando desde el IP ” . $datos[“ip”] . ” con el navegador ” . $datos[“navegador”] .
. ” a la página ” . $datos[“pagina”] . ” \n”;
$gestor = fopen($ruta, ‘a’);
fwrite ($gestor, $string);
fclose($gestor);
}
?>
La función anterior obtiene la información a volcar en la traza mediante la variables $datos, luego crea / actualiza el fichero dentro del proyecto llamado traza.log, la variable $string es para construir la traza a nuestro gusto y las demás sentencias es mero tecnicismo de guardar información usando las funcionalidades de PHP.
Lo siguiente es incluir el fichero util.php en nuestras páginas PHP donde queramos dejar una traza. Para ello usamos la instrucción include_once.
// Ejemplo de código de listar-usuarios.php
<?php
// Obteniendo datos del que navega por la webapp
$ip = $_SERVER[“REMOTE_ADDR”]; // IP
$navegador = $_SERVER[“HTTP_USER_AGENT”]; // NAVEGADOR
$pagina = “listar-usuarios.php”; // PAGINA
include_once(“util.php”);
$datos = array (
“ip” => $ip_visitante,
“navegador” => $navegador,
“pagina” => $pagina
);
generaTraza($datos);
?>
Cuando pongamos en nuestro navegador la url http://mipc.midominio.cu/webapp/listar.usuarios.php se irán generando en el fichero trazas.log entradas de una linea con texto similar al que a continuación expongo:
// Ejemplo de contenido de traza.log
Están navegando desde el IP 192.168.1.234 con el navegador Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2115.0 Safari/537.36 a la página listar-usuarios.php
Están navegando desde el IP 192.168.1.2 con el navegador Mozilla/5.0 (Windows NT 5.1; rv:17.0) Gecko/20100101 Firefox/17.0 a la página listar-usuarios.php
¿Sencillo verdad? Yo sé que a veces soluciones más sencillas son las que nos demuestran que no debes ser todo un genio para enfrentarte a un problema, sino saber el número (o bien puede ser email, twitter, facebook, youtube, etc ) del que tiene la solución.







4 comentarios
Ir al formulario de comentarios
Muy util e interesante. Con el permiso del autor, espero no violar la licencia del su codigo 🙂 Otra variante pudiera ser esta:
// lo mas significativo es que se obtiene la URI de las variables de entorno en vez de pasar el nombre del fichero en cada llamada.
// generar-traza.php
<?php
function generaTraza() {
$ip = $_SERVER["REMOTE_ADDR"]; // IP
$navegador = $_SERVER["HTTP_USER_AGENT"]; // NAVEGADOR
$uri = $_SERVER["REQUEST_URI"]; // RUTA
$fichero = “traza.log”;
$traza = “Están navegando desde el IP {$ip} con el navegador {$navegador} a la página {$uri} \n”;
$gestor = fopen($fichero, ‘a’);
fwrite ($gestor, $traza);
fclose($gestor);
}
generaTraza();
// listar-usuarios.php
<?php
include(“generar-traza.php”);
Autor
Tu sabes que en materia de programación usted es mi sensei. Es más tírale un revisado a todos los códigos que he publicado a ver si pueden mejorar.
Salu2
jeje, tu codigo esta perfecto, solo queria compartir lo util de explotar al maximo la variable $_SERVER que contiene una gran cantidad de datos para rastrear al usuario.
Autor
Ahhh, hermoso post para explotar a PHP. A EXPLOTAR.
Salu2