Necesito guardar datos en una tabla (para informes, estadísticas, etc.) para que un usuario pueda buscar por tiempo, agente de usuario, etc. Tengo un script que se ejecuta todos los días que dice Apache Log y luego insertarlo en la base de datos.Parse Apache inicie sesión en PHP usando preg_match
formato de registro:
10.1.1.150 - - [29/September/2011:14:21:49 -0400] "GET /info/ HTTP/1.1" 200 9955 "http://www.domain.com/download/" "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; de-at) AppleWebKit/533.21.1 (KHTML, like Gecko) Version/5.0.5 Safari/533.21.1"
Mi expresiones regulares:
preg_match('/^(\S+) (\S+) (\S+) \[([^:]+):(\d+:\d+:\d+) ([^\]]+)\] \"(\S+) (.*?) (\S+)\" (\S+) (\S+) (\".*?\") (\".*?\")$/',$log, $matches);
Ahora, cuando impresión:
print_r($matches);
Array
(
[0] => 10.1.1.150 - - [29/September/2011:14:21:49 -0400] "GET /info/ HTTP/1.1" 200 9955 "http://www.domain.com/download/" "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; de-at) AppleWebKit/533.21.1 (KHTML, like Gecko) Version/5.0.5 Safari/533.21.1"
[1] => 10.1.1.150
[2] => -
[3] => -
[4] => 29/September/2011
[5] => 14:21:49
[6] => -0400
[7] => GET
[8] => /info/
[9] => HTTP/1.1
[10] => 200
[11] => 9955
[12] => "http://www.domain.com/download/"
[13] => "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; de-at) AppleWebKit/533.21.1 (KHTML, like Gecko) Version/5.0.5 Safari/533.21.1"
)
me sale: "http://www.domain.com/download/"
y lo mismo para el agente de usuario. ¿Cómo puedo deshacerme de estos "
en la expresión regular? Bonificación (¿Hay alguna forma rápida de insertar la fecha/hora fácilmente)?
Gracias
Este es un duplicado de la pregunta # 2221636 –
He escrito una clase de ayuda simple para esto. Ver https://github.com/Spudley/ApacheLogIterator – SDC
@SDC: Gracias Simon, ¡ese iterador es asombroso! – Pete855217