Avatar billede tblaster Nybegynder
22. oktober 2007 - 10:21 Der er 1 kommentar og
1 løsning

AWStats Totals med udskrivning af flere måneder

Hejsa

Er 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>&nbsp;
<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>&nbsp;<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">&nbsp;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>
Avatar billede tblaster Nybegynder
29. oktober 2007 - 09:55 #1
Anyone?
Avatar billede tblaster Nybegynder
21. marts 2008 - 15:50 #2
Lukker
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester