|<)/',"",htmlspecialchars($_REQUEST['strfilter']));
$logtype = strtolower($_REQUEST['logtype']);
// Get log type (access or error)
if ($logtype == "error")
$error="-error";
// Define log file name
$logfile ='/var/log/httpd-'. preg_replace("/(\s|'|\"|;)/","",$_REQUEST['logfile']) . $error.'.log';
if ($logfile == '/var/log/httpd-access-error.log')
$logfile = '/var/log/httpd-error.log';
//debug
echo "
\n";
echo "$logfile | \n";
if (file_exists($logfile)){
switch ($logtype) {
case 'access':
//show table headers
show_tds(array("Time","Host","Response","Method","Request"));
//fetch lines
$logarr=fetch_log($logfile);
// Print lines
foreach ($logarr as $logent) {
// Split line by space delimiter
$logline = preg_split("/\n/", $logent);
/*
field 1: 189.29.36.26
field 2: -
field 3: -
field 4: 04/Jul/2012
field 5: 10:54:39
field 6: -0300
field 7: GET
field 8: /
field 9: HTTP/1.1
field 10: 303
field 11: -
field 12: -
field 13: Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.19 (KHTML, like Gecko) Ubuntu/12.04 Chromium/18.0.1025.151 Chrome/18.0.1025.151 Safari/535.19
*/
$regex = '/^(\S+) (\S+) (\S+) \[([^:]+):(\d+:\d+:\d+) ([^\]]+)\] \"(\S+) (.*?) (\S+)\" (\S+) (\S+) "([^"]*)" "([^"]*)"$/';
if (preg_match($regex, $logline[0],$line)) {
// Apply filter and color
if ($filter != "")
$line = preg_replace("@($filter)@i","$1",$line);
$agent_info="onmouseover=\"jQuery('#browserinfo').empty().html('{$line[13]}');\"\n";
echo "\n";
echo "{$line[5]}({$line[6]}) | \n";
echo "{$line[1]} | \n";
echo "{$line[10]} | \n";
echo "{$line[7]} | \n";
//echo "{$line[8]} | \n";
echo "{$line[8]} | \n";
echo "
\n";
}
}
break;
case 'error':
//show table headers
show_tds(array("DateTime","Severity","Message"));
//fetch lines
$logarr=fetch_log($logfile);
// Print lines
foreach ($logarr as $logent) {
// Split line by space delimiter
$logline = preg_split("/\n/", $logent);
/*
field 1: Wed Jul 04 20:22:28 2012
field 2: error
field 3: 187.10.53.87
field 4: proxy: DNS lookup failure for: 192.168.15.272 returned by /
*/
$regex = '/^\[([^\]]+)\] \[([^\]]+)\] (?:\[client ([^\]]+)\])?\s*(.*)$/i';
if (preg_match($regex, $logline[0],$line)) {
// Apply filter and color
if ($filter != "")
$line = preg_replace("@($filter)@i","$1",$line);
if ($line[3])
$line[3] = gettext("Client address:") . " [{$line[3]}]";
echo "\n";
echo "{$line[1]} | \n";
echo "{$line[2]} | \n";
echo "{$line[3]} {$line[4]} | \n";
echo "
\n";
}
}
break;
}
}
}
# ------------------------------------------------------------------------------
# Functions
# ------------------------------------------------------------------------------
// From SquidGuard Package
function html_autowrap($cont)
{
# split strings
$p = 0;
$pstep = 25;
$str = $cont;
$cont = '';
for ( $p = 0; $p < strlen($str); $p += $pstep ) {
$s = substr( $str, $p, $pstep );
if ( !$s ) break;
$cont .= $s . "";
}
return $cont;
}
// Show Logs
function fetch_log($log){
global $filter;
// Get Data from form post
$lines = $_REQUEST['maxlines'];
if (preg_match("/!/",htmlspecialchars($_REQUEST['strfilter'])))
$grep_arg="-iv";
else
$grep_arg="-i";
// Get logs based in filter expression
if($filter != "") {
exec("tail -2000 {$log} | /usr/bin/grep {$grep_arg} " . escapeshellarg($filter). " | tail -r -n {$lines}" , $logarr);
}
else {
exec("tail -r -n {$lines} {$log}", $logarr);
}
// return logs
return $logarr;
}
function show_tds($tds){
echo "\n";
foreach ($tds as $td){
echo "".gettext($td)." | \n";
}
echo "
\n";
}
?>