AWStats Totals med udskrivning af flere måneder
HejsaEr der nogen der kan hjælpe mig med at få AWStats Totals (http://www.telartis.nl/xcms/awstats) til at udskrive statistikken for flere måneder på en gang under hinanden (dvs. denne + de sidste 2). Således at jeg øverst får udskrevet for denne måned og nederst for de sidste måneder. Over hver udskrivning skal desuden angives for hvilken måned og år tallene er for.
Koden ser således ud, men kan også hentes via linket:
/*******************************************************
* PROGRAM SECTION
*******************************************************/
if (isset($_GET['year'])) $year = $_GET['year']; else $year = date('Y');
if (isset($_GET['month'])) $month = $_GET['month']; else $month = date('n');
if (isset($_GET['sort'])) $sort = $_GET['sort']; else $sort = $sort_default;
function get_config($file) {
$r = '';
if (preg_match('/awstats\d{6}\.(.+)\.txt/', $file, $match)) $r = $match[1];
return $r;
}
function read_history($file) {
$config = get_config($file);
$s = '';
$f = fopen($file, 'r');
while (!feof($f)) {
$line = fgets($f, 4096);
$s .= $line;
if (trim($line) == 'END_TIME') break;
}
fclose($f);
$visits_total = 0; $unique_total = 0; $pages_total = 0; $hits_total = 0; $bandwidth_total = 0;
$not_viewed_pages_total = 0; $not_viewed_hits_total = 0; $not_viewed_bandwidth_total = 0;
if (preg_match('/TotalVisits (\d+)/', $s, $match)) $visits_total = (int)$match[1];
if (preg_match('/TotalUnique (\d+)/', $s, $match)) $unique_total = (int)$match[1];
if (preg_match('/\nBEGIN_TIME \d+\n(.*)\nEND_TIME\n/s', $s, $match)) {
foreach (explode("\n", $match[1]) as $row) {
list($hour, $pages, $hits, $bandwidth,
$not_viewed_pages, $not_viewed_hits, $not_viewed_bandwidth) = explode(' ', $row);
$pages_total += $pages; $hits_total += $hits; $bandwidth_total += $bandwidth;
$not_viewed_pages_total += $not_viewed_pages;
$not_viewed_hits_total += $not_viewed_hits;
$not_viewed_bandwidth_total += $not_viewed_bandwidth;
}
}
return array('config'=>$config, 'visits'=>$visits_total, 'unique'=>$unique_total,
'pages'=>$pages_total, 'hits'=>$hits_total, 'bandwidth'=>$bandwidth_total,
'not_viewed_pages'=>$not_viewed_pages_total,
'not_viewed_hits'=>$not_viewed_hits_total,
'not_viewed_bandwidth'=>$not_viewed_bandwidth_total);
}
function parse_dir($dir) {
// add trailing slash if not exists
if (substr($dir, -1) != '/') $dir .= '/';
$files = array();
if ($dh = @opendir($dir)) {
while (($file = readdir($dh)) !== false) {
if (!preg_match('/^\./s', $file)) {
if (is_dir($dir.$file)) {
$newdir = $dir.$file.'/';
chdir($newdir);
$files = array_merge($files, parse_dir($newdir));
} else {
$files[] = $dir.$file;
}
}
}
chdir('..');
}
return $files;
}
if (!file_exists($DirData)) die("Could not open directory $DirData");
$dirfiles = parse_dir($DirData);
$files = array();
$config = array();
if ($month == 'all') $pat = '\d{2}'; else $pat = substr('0'.$month, -2);
$pat = '/awstats'.$pat.$year.'\.(.+)\.txt$/';
foreach ($dirfiles as $file) if (preg_match($pat, $file, $match)) {
$config = $match[1];
if (!$FilterConfigs || in_array($config, $FilterConfigs)) {
$configs[] = $config;
$files[] = $file;
}
}
$visits_total = 0; $unique_total = 0; $pages_total = 0; $hits_total = 0; $bandwidth_total = 0;
$not_viewed_pages_total = 0; $not_viewed_hits_total = 0; $not_viewed_bandwidth_total = 0;
$rows = array();
if ($files) {
array_multisort($configs, $files);
$row_prev = array();
for ($i = 0, $cnt = count($files); $i <= $cnt; $i++) {
$row = array();
if ($i < $cnt) {
$row = read_history($files[$i]);
if ($NotViewed == 'sum') {
$row['pages'] += $row['not_viewed_pages'];
$row['hits'] += $row['not_viewed_hits'];
$row['bandwidth'] += $row['not_viewed_bandwidth'];
}
$visits_total += $row['visits'];
$unique_total += $row['unique'];
$pages_total += $row['pages'];
$hits_total += $row['hits'];
$bandwidth_total += $row['bandwidth'];
if ($NotViewed == 'columns') {
$not_viewed_pages_total += $row['not_viewed_pages'];
$not_viewed_hits_total += $row['not_viewed_hits'];
$not_viewed_bandwidth_total += $row['not_viewed_bandwidth'];
}
}
if ( isset($row['config']) && isset($row_prev['config']) &&
($row['config'] == $row_prev['config']) ) {
$row['visits'] += $row_prev['visits'];
$row['unique'] += $row_prev['unique'];
$row['pages'] += $row_prev['pages'];
$row['hits'] += $row_prev['hits'];
$row['bandwidth'] += $row_prev['bandwidth'];
if ($NotViewed == 'columns') {
$row['not_viewed_pages'] += $row_prev['not_viewed_pages'];
$row['not_viewed_hits'] += $row_prev['not_viewed_hits'];
$row['not_viewed_bandwidth'] += $row_prev['not_viewed_bandwidth'];
}
} elseif ($i > 0) $rows[] = $row_prev;
$row_prev = $row;
}
}
function multisort(&$array, $key) {
$cmp = create_function('$a, $b',
'if ($a["'.$key.'"] == $b["'.$key.'"]) return 0;'.
'return ($a["'.$key.'"] > $b["'.$key.'"]) ? -1 : 1;');
usort($array, $cmp);
}
if ($sort == 'config') sort($rows); else multisort($rows, $sort);
function detect_language($DirLang) {
$Lang = '';
foreach (explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']) as $Lang) {
$Lang = strtolower(substr($Lang, 0, 2));
if (file_exists("$DirLang/awstats-$Lang.txt")) break; else $Lang = '';
}
if (!$Lang) $Lang = 'en';
return $Lang;
}
function read_language_data($file) {
$r = array();
$lines = file($file);
if ($lines) foreach ($lines as $line)
if (preg_match('/^message(\d+)=(.*)$/', $line, $match))
$r[$match[1]] = $match[2];
return $r;
}
// remove trailing slash if exists
if (substr($DirLang, -1) == '/') $DirLang = substr($DirLang, 0, strlen($DirLang) - 1);
if ($Lang == 'auto') $Lang = detect_language($DirLang);
$message = read_language_data("$DirLang/awstats-$Lang.txt");
if (!$message) {
$message[7] = 'Statistics for';
$message[10] = 'Number of visits';
$message[11] = 'Unique visitors';
$message[56] = 'Pages';
$message[57] = 'Hits';
$message[60] = 'Jan';
$message[61] = 'Feb';
$message[62] = 'Mar';
$message[63] = 'Apr';
$message[64] = 'May';
$message[65] = 'Jun';
$message[66] = 'Jul';
$message[67] = 'Aug';
$message[68] = 'Sep';
$message[69] = 'Oct';
$message[70] = 'Nov';
$message[71] = 'Dec';
$message[75] = 'Bandwidth';
$message[102] = 'Total';
$message[115] = 'OK';
$message[133] = 'Reported period';
$message[160] = 'Viewed traffic';
$message[161] = 'Not viewed traffic';
}
function byte_format($number, $decimals = 2) {
global $dec_point, $thousands_sep;
// kilo, mega, giga, tera, peta, exa, zetta, yotta
$prefix_arr = array('','k','M','G','T','P','E','Z','Y');
$i = 0;
if ($number == 0) $result = 0; else {
$value = round($number, $decimals);
while ($value > 1024) { $value /= 1024; $i++; }
$result = number_format($value, $decimals, $dec_point, $thousands_sep);
}
$result .= ' '.$prefix_arr[$i].'B'; if (!$i) $result .= 'ytes';
return $result;
}
function num_format($number, $decimals = 0) {
global $dec_point, $thousands_sep;
return number_format($number, $decimals, $dec_point, $thousands_sep);
}
/*******************************************************
* HTML SECTION
*******************************************************/
?>
<!DOCTYPE HTML PUBLIC -//W3C//DTD HTML 4.01 Transitional//EN>
<html>
<head>
<title>AWStats Totals</title>
<style type="text/css">
body { font: 11px verdana,arial,helvetica,sans-serif; background-color: white }
td { font: 11px verdana,arial,helvetica,sans-serif; text-align: center; color: black }
.l { text-align: left }
.b { background-color: #ccccdd; padding: 2px; margin: 0 }
.d { background-color: white }
.f { font: 14px verdana,arial,helvetica }
.border { border: #ececec 1px solid }
A:link {
COLOR: #000000;
TEXT-DECORATION: none;
}
A:visited {
COLOR: #000000;
TEXT-DECORATION: none;
}
A:hover {
COLOR: #000000;
TEXT-DECORATION: underline;
}
</style>
</head>
<body>
<form action="<?php echo $_SERVER['SCRIPT_NAME']; ?>">
<table class="b" border="0" cellpadding="2" cellspacing="0" width="100%">
<tr><td class="l">
<table class="d" border="0" cellpadding="8" cellspacing="0" width="100%">
<tr>
<th><div align="right"><?php echo $message[133]; ?>:</div></th>
<td class="l">
<?php
echo '<select class="f" name="month">'."\n";
for ($i = 1; $i <= 12; $i++) {
echo '<option value="'.$i.'"'; if ($month == $i) echo ' selected'; echo '>'.$message[$i + 59]."\n";
}
echo '<option value="all"'; if ($month == 'all') echo ' selected'; echo '>-'."\n";
echo '</select>'."\n";
echo '<select class="f" name="year">'."\n";
for ($curyear = date('Y'), $i = $curyear - 2; $i <= $curyear; $i++) {
echo '<option value="'.$i.'"'; if ($year == $i) echo ' selected'; echo '>'.$i."\n";
}
echo '</select>'."\n";
?>
<input type="submit" class="f" value="<?php echo $message[115]; ?>">
</td></tr>
</table>
</td></tr>
</table>
</form>
<table align="center">
<?php
if ($NotViewed == 'columns') {
?>
<tr>
<td>
<td class="border" colspan="5"><?php echo $message[160]; ?>
<td class="border" colspan="3"><?php echo $message[161]; ?>
<tr>
<?php
}
$url = $_SERVER['SCRIPT_NAME']."?month=$month&year=$year&sort=";
?>
<td bgcolor="#ECECEC" class="l" nowrap> <a href="<?php echo $url; ?>config" class="h"><?php echo $message[7]; ?></a>
<td width="80" bgcolor="#EAF8E6"><a href="<?php echo $url; ?>unique" class="h"><?php echo $message[11]; ?></a>
<td width="80" bgcolor="#D0F0FF"><a href="<?php echo $url; ?>visits" class="h"><?php echo $message[10]; ?></a>
<td width="80" bgcolor="#F6E6F8"><a href="<?php echo $url; ?>pages" class="h"><?php echo $message[56]; ?></a>
<td width="80" bgcolor="#FFE7E2"><a href="<?php echo $url; ?>hits" class="h"><?php echo $message[57]; ?></a>
<td width="80" bgcolor="#FFDBC1"><a href="<?php echo $url; ?>bandwidth" class="h"><?php echo $message[75]; ?></a>
<?php
if ($NotViewed == 'columns') {
?>
<td width="80" bgcolor="#4477DD"><a href="<?php echo $url; ?>not_viewed_pages" class="h"><?php echo $message[56]; ?></a>
<td width="80" bgcolor="#66F0FF"><a href="<?php echo $url; ?>not_viewed_hits" class="h"><?php echo $message[57]; ?></a>
<td width="80" bgcolor="#2EA495"><a href="<?php echo $url; ?>not_viewed_bandwidth" class="h"><?php echo $message[75]; ?></a>
<?php
}
foreach ($rows as $row) {
echo '<tr><td class="l"><a href="'.$AWStatsURL."?month=$month&year=$year&config=".
$row['config'].'">';
if ($row['config'] == 'j2f') { echo 'Just2Funny'; }
else { echo $row['config'];}
echo '</a><td>'.num_format($row['unique']).
'<td>'.num_format($row['visits']).'<td>'.num_format($row['pages']).
'<td>'.num_format($row['hits']).'<td>'.byte_format($row['bandwidth']);
if ($NotViewed == 'columns') echo '<td>'.num_format($row['not_viewed_pages']).
'<td>'.num_format($row['not_viewed_hits']).
'<td>'.byte_format($row['not_viewed_bandwidth']);
echo "\n";
}
echo '<tr><td class="l" bgcolor="#ECECEC"> Total<td bgcolor="#ECECEC">'.num_format($unique_total).
'<td bgcolor="#ECECEC">'.num_format($visits_total).'<td bgcolor="#ECECEC">'.num_format($pages_total).
'<td bgcolor="#ECECEC">'.num_format($hits_total).'<td bgcolor="#ECECEC">'.byte_format($bandwidth_total);
if ($NotViewed == 'columns') echo '<td bgcolor="#ECECEC">'.num_format($not_viewed_pages_total).
'<td bgcolor="#ECECEC">'.num_format($not_viewed_hits_total).
'<td bgcolor="#ECECEC">'.byte_format($not_viewed_bandwidth_total);
echo "\n";
?>
</table>
