Ho bisogno di salvare i dati in una tabella (per rapporti, statistiche ecc ...) in modo che un utente possa cercare per ora, agente utente ecc. Ho uno script che viene eseguito ogni giorno che legge il registro Apache e quindi inserirlo nel database.Parse Apache accede a PHP utilizzando preg_match
formato di 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"
mia espressione regolare:
preg_match('/^(\S+) (\S+) (\S+) \[([^:]+):(\d+:\d+:\d+) ([^\]]+)\] \"(\S+) (.*?) (\S+)\" (\S+) (\S+) (\".*?\") (\".*?\")$/',$log, $matches);
Ora quando stampo:
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"
)
ottengo: "http://www.domain.com/download/"
e lo stesso per user agent. Come posso liberarmi di questi "
nell'espressione regolare? Bonus (C'è un modo rapido per inserire facilmente la data/ora)?
Grazie
Questo è un duplicato di domanda # 2221636 –
Ho scritto una semplice classe di supporto per questo. Vedi https://github.com/Spudley/ApacheLogIterator – SDC
@SDC: Grazie Simon, l'iteratore è fantastico! – Pete855217