| 
<?php
/*
 +----------------------------------------------+
 |                                              |
 |         PHP apache log parser class          |
 |                                              |
 +----------------------------------------------+
 | Filename   : apache-log-parser.php           |
 | Created    : 21-Sep-05 23:28 GMT             |
 | Created By : Sam Clarke                      |
 | Email      : [email protected]   |
 | Version    : 1.0                             |
 |                                              |
 +----------------------------------------------+
 
 
 LICENSE
 
 This program is free software; you can redistribute it and/or
 modify it under the terms of the GNU General Public License (GPL)
 as published by the Free Software Foundation; either version 2
 of the License, or (at your option) any later version.
 
 This program is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.
 
 To read the license please visit http://www.gnu.org/copyleft/gpl.html
 
 */
 
 class apache_log_parser
 {
 
 var $bad_rows; // Number of bad rows
 var $fp; // File pointer
 
 function format_log_line($line)
 {
 preg_match("/^(\S+) (\S+) (\S+) \[([^:]+):(\d+:\d+:\d+) ([^\]]+)\] \"(\S+) (.*?) (\S+)\" (\S+) (\S+) (\".*?\") (\".*?\")$/", $line, $matches); // pattern to format the line
 return $matches;
 }
 
 function format_line($line)
 {
 $logs = $this->format_log_line($line); // format the line
 
 if (isset($logs[0])) // check that it formated OK
 {
 $formated_log = array(); // make an array to store the lin info in
 $formated_log['ip'] = $logs[1];
 $formated_log['identity'] = $logs[2];
 $formated_log['user'] = $logs[2];
 $formated_log['date'] = $logs[4];
 $formated_log['time'] = $logs[5];
 $formated_log['timezone'] = $logs[6];
 $formated_log['method'] = $logs[7];
 $formated_log['path'] = $logs[8];
 $formated_log['protocal'] = $logs[9];
 $formated_log['status'] = $logs[10];
 $formated_log['bytes'] = $logs[11];
 $formated_log['referer'] = $logs[12];
 $formated_log['agent'] = $logs[13];
 return $formated_log; // return the array of info
 }
 else
 {
 $this->badRows++; // if the row is not in the right format add it to the bad rows
 return false;
 }
 }
 
 function open_log_file($file_name)
 {
 $this->fp = fopen($file_name, 'r'); // open the file
 if (!$this->fp)
 {
 return false; // return false on fail
 }
 return true; // return true on sucsess
 }
 
 function close_log_file()
 {
 return fclose($this->fp); // close the file
 }
 
 // gets a line from the log file
 function get_line()
 {
 if (feof($this->fp))
 {
 return false;
 }
 $bits='';
 // I find for loops much much faster
 for (;!feof($this->fp) && $bits != "\n";)
 {
 $bits .= fread($this->fp, 1);
 }
 return rtrim($bits, "\n");
 }
 
 }
 ?>
 |