Foros del Web » Programando para Internet » PHP »

Expresión regular para access.log de Apache

Estas en el tema de Expresión regular para access.log de Apache en el foro de PHP en Foros del Web. Hola! Llevo tiempo buscando una expresión regular para poder cargar los registros del fichero de accesos de un servidor web (Apache). Al final, cómo lo ...
  #1 (permalink)  
Antiguo 05/09/2008, 09:15
 
Fecha de Ingreso: mayo-2005
Mensajes: 188
Antigüedad: 18 años, 11 meses
Puntos: 6
Información Expresión regular para access.log de Apache

Hola!

Llevo tiempo buscando una expresión regular para poder cargar los registros del fichero de accesos de un servidor web (Apache). Al final, cómo lo que encontraba no me convencía, he decidido hacerlo yo mismo. Aquí os dejo el resultado:
Código PHP:
$str '... fila del archivo access del webserver ...';    
if (
preg_match('/([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+) -([\w\s]*) - \[(.*)\] "(.*) (.*) HTTP\/(.*)" (\d+) (\d+|-) "(.*)" "(.*)"/'$str$match)) {
    
$log = array();
            
    
$log['ip'] = $match[1];
    
$log['user'] = $match[2];
    
$log['datestr'] = $match[3];
    
$log['option'] = $match[4];
    
$log['url'] = $match[5];
    
$log['http'] = $match[6];
    
$log['code'] = $match[7];
    
$log['bytes'] = $match[8];
    
$log['ref'] = $match[9];
    
$log['agent'] = $match[10];

He estado haciendo pruebas, y de momento parece que funciona. Sin embargo, me gustaría asegurarme que el formato es el correcto. Si alguien encuentra algún error o alguna mejora en la expresión, por favor, indicadla aquí :)

Un ejemplo de un registro de acceso con los que he hecho las pruebas sería:
Código:
11.22.33.44 - - [01/Sep/2007:14:00:41 +0200] "GET /img/es.png HTTP/1.1" 200 271 "http://www.miservidor.com/" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; InfoPath.1)"
Para el registro anterior, el contenido de $log sería el siguiente:
Código PHP:
    $log['ip'] = '11.22.33.44';
    
$log['user'] = '';
    
$log['datestr'] = '01/Sep/2007:14:00:41 +0200';
    
$log['option'] = 'GET';
    
$log['url'] = '/img/es.png';
    
$log['http'] = '1.1';
    
$log['code'] = 200;
    
$log['bytes'] = 271;
    
$log['ref'] = 'http://www.miservidor.com/';
    
$log['agent'] = 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; InfoPath.1)'
Saludos ;)
  #2 (permalink)  
Antiguo 06/09/2008, 13:39
 
Fecha de Ingreso: mayo-2005
Mensajes: 188
Antigüedad: 18 años, 11 meses
Puntos: 6
Respuesta: Expresión regular para access.log de Apache

Pues ahí va el primer cambio:

Regexp:
Código:
'/([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+) (\S+) (\S+) \[(.*)\] "(.*) (.*) HTTP\/(.*)" (\d+) (\d+|-) "(.*)" "(.*)"/'
Campos:
Código PHP:
$log['ip'] = $match[1];
$log['rlogname'] = $match[2];
$log['user'] = $match[3];
$log['datestr'] = $match[4];
$log['option'] = $match[5];
$log['url'] = $match[6];
$log['http'] = $match[7];
$log['code'] = $match[8];
$log['bytes'] = $match[9];
$log['ref'] = $match[10];
$log['agent'] = $match[11]; 
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:26.