1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| <?php $string = <<<LOD
178.255.215.78 - - [16/Mar/2013:03:00:32 +0100] "GET /saint-egreve-38120/homeopathe/ HTTP/1.1" 200 6886 "-" "Mozilla/5.0 (compatible; Exabot/3.0; +http://www.exabot.com/go/robot)"
127.0.0.1 - - [20/Mar/2013:22:51:33 +0100] "GET /css/style.css HTTP/1.1" 200 1603 "http://truc/" "Opera/9.80 (X11; Linux x86_64; Edition Linux Mint) Presto/2.12.388 Version/12.12"
127.0.0.1 - - [21/Mar/2013:07:39:31 +0100] "OPTIONS * HTTP/1.0" 200 126 "-" "Apache/2.2.22 (Ubuntu) (internal dummy connection)"
LOD;
// définition des champs utiles et du masque correspondant pour créer la pattern
$fields = array( 'remote_host', 'log_name', 'user_id', 'date_time', 'request', 'method', 'request_url', 'protocol', 'status', 'size', 'referer', 'user_agent' );
$mask = '`^(?<%s>.+) (?<%s>.+) (?<%s>.+) \[(?<%s>.+)] "(?<%s>(?<%s>.+) (?<%s>.+) (?<%s>.+))" (?<%s>.+) (?<%s>.+) "(?<%s>.+)" "(?<%s>.+)"$`Um';
$pattern = vsprintf( $mask, $fields );
preg_match_all( $pattern, $string, $matches, PREG_SET_ORDER );
// récupération du résultat et élimination des variables inutiles
$result = array();
$fields = array_flip( $fields );
foreach ($matches as $match) { $result[] = array_intersect_key( $match, $fields ) ; }
unset ($fields, $mask, $pattern, $matches, $match);
?><pre><?php print_r( $result ); ?></pre> |
Partager