<?php
//=================初期設定==================
$title = 'KOMOアナライザー';
$date_now = date("Y/m/d(D)"); //日付の取得
$hour = date("H"); //時刻の取得
$gazou = './komo_ana.jpg';
$graph_img = './cnt.gif';
$graph_img2 = './cnt2.gif';
$data_file = './ana.dat'; //データファイル
$max = 500; //最大記録数
$hostview = 30;
$agentview = 50;
$hrefview = 50;
$graphview = 100;
$date_max = 30;
$time_max = 24;
//===========================================

//スーパーグローバル変数対策
if(!isset($PHP_SELF)){ $PHP_SELF = $_SERVER["PHP_SELF"]; }
if(!isset(
$action)){ $action = $_GET['action']; }
if(!isset(
$timeflag)){ $timeflag = $_GET['timeflag']; }
if(!isset(
$Cookie_ana)){ $Cookie_ana = $_COOKIE['Cookie_ana']; }

//データ分析
if($action == 'view'){
    
$v_data = file($data_file);
    
$v_cnt = count($v_data);
    for(
$i=0; $i<$v_cnt; $i++){
        list(
$da,$ho,$ag,$hf,$hr) = split("<>", $v_data[$i]);
        
$DA[$da]++; //日付毎の集計
        
if($timeflag > 0){
            if(
$date_now == $da){
                
$TI[$hr]++; //時間毎の集計
            
}
        }else{
            
$TI[$hr]++; //時間毎の集計
        
}
        
$HO[$ho]++; //ホスト毎の集計
        
$AG[$ag]++; //ブラウザ毎の集計
        
$HF[$hf]++; //リンク元毎の集計
    
}
    
//並べ替え
    
if($v_cnt > 0){
        while(list(
$key,$value)= each($DA)){
            
$dummy = "$key<>$value";
            
$DATE[] = "$dummy";
            
$s = sprintf("%04d", $value);
            
$dummy2 = "$s<>$key<>$value";
            
$DATE2[] = "$dummy2";
        }
        list(
$d,$datecount) = split("<>", $DATE[0]);
        
rsort($DATE2);
        list(
$d,$e,$max_date) = split("<>", $DATE2[0]);
    }
    if(
$v_cnt > 0){
        while(list(
$key,$value)= each($TI)){
            
$dummy = "$key<>$value";
            
$TIME[] = "$dummy";
            
$s = sprintf("%04d", $value);
            
$dummy2 = "$s<>$key<>$value";
            
$TIME2[] = "$dummy2";
        }
        
rsort($TIME2);
        list(
$d,$e,$max_time) = split("<>", $TIME2[0]);
    }
    if(
$v_cnt > 0){
        while(list(
$key,$value)= each($HO)){
            
$s = sprintf("%04d", $value);
            
$dummy = "$s<>$key<>$value";
            
$HOST[] = "$dummy";
        }
        
rsort($HOST);
        list(
$d,$e,$max_host) = split("<>", $HOST[0]);
    }
    if(
$v_cnt > 0){
        while(list(
$key,$value)= each($AG)){
            
$s = sprintf("%04d", $value);
            
$dummy = "$s<>$key<>$value";
            
$AGENT[] = "$dummy";
        }
        
rsort($AGENT);
        list(
$d,$e,$max_agent) = split("<>", $AGENT[0]);
    }
    if(
$v_cnt > 0){
        while(list(
$key,$value)= each($HF)){
            
$s = sprintf("%04d", $value);
            
$dummy = "$s<>$key<>$value";
            
$HREF[] = "$dummy";
        }
        
rsort($HREF);
        list(
$d,$e,$max_href) = split("<>", $HREF[0]);
    }
    
//===================HTML出力==================
    
echo "<html><head><title>$title</title></head>\n";
    echo
"<body bgcolor=#ffffff text=#000000 link='red' vlink='red'>\n";
    echo
"<center>\n";
    echo
"<img src=./banner.gif><br>\n";
    echo
"<font color='green'><b><最新 $max アクセスの解析結果></b></font>\n";
    echo
"<p>現在のサンプル数 $v_cnt アクセスです。<BR><FONT SIZE=2><<a href=smp_page.htm>解析ページに戻る</a>></FONT></p>\n";
    echo
"<table border=1 cellspacing=0 width=90%>\n";
    
//本日の時間別統計
    
if($timeflag > 0){
        echo
"<caption>本日 $date_now の時間別統計<br>\n";
        echo
"<font size=2>[<a href=$PHP_SELF?action=view&timeflag=0>データ全体を見る</a>]</font></caption>\n";
    } else {
        echo
"<caption>データ全体の時間別統計<br>\n";
        echo
"<font size=2>[<a href=$PHP_SELF?action=view&timeflag=1>本日のデータを見る</a>]</font></caption>\n";
    }
    echo
"<tr><td bgcolor=#ffccff><font size=2>グラフ</font></td>\n";
    if(
$time_max > count($TIME)){ $time_max = count($TIME); }
    for(
$i=0; $i<24; $i++){
        for(
$j=0; $j<$time_max; $j++){
            list(
$d,$c) = split("<>", $TIME[$j]);
            if(
$c > 0 && $i == $d){
                
$chrlen = $c / $max_time * $graphview;
                break;
            } else {
                
$chrlen = 0;
            }
        }
        echo
"<td align=center valign=bottom><img src=$graph_img2 width=10 height=$chrlen></td>\n";
    }
    echo
"</tr>\n";
    echo
"<tr><td bgcolor=#ffccff><font size=2>時間</font></td>\n";
    for(
$i=0; $i<24; $i++){
        echo
"<td bgcolor=#ccffff>$i</td>\n";
    }
    echo
"</tr>\n";
    echo
"<tr><td bgcolor=#ffccff><font size=2>カウント</font></td>\n";
    if(
$time_max > count($TIME)){ $time_max = count($TIME); }
    for(
$i=0; $i<24; $i++){
        for(
$j=0; $j<$time_max; $j++){
            list(
$d,$c) = split("<>", $TIME[$j]);
            if(
$c > 0 && $i == $d){
                
$c2 = $c;
                break;
            } else {
                
$c2 = 0;
            }
        }
        echo
"<td>$c2</td>\n";
    }
    echo
"</tr>\n";
    echo
"<tr><td bgcolor=#ffccff><font size=2>ポイント(%)</font></td>\n";
    for(
$i=0; $i<24; $i++){
        for(
$j=0; $j<$time_max; $j++){
            list(
$d,$c) = split("<>", $TIME[$j]);
            if(
$c > 0 && $i == $d){
                if(
$timeflag > 0){
                    
$per = $c / $datecount * 100;
                    break;
                } else {
                    
$per = $c / $v_cnt * 100;
                    break;
                }
            } else {
                
$per = 0;
            }
        }
        echo
"<td>\n";
        
printf("%10.1f", $per);
        echo
"<BR>%</td>\n";
    }
    echo
"</tr></table><br>\n";
    echo
"<table border=0 cellpadding=0 cellspacing=0 width=90%>\n";
    echo
"<tr><td valign=top width=49%>\n";
    
//日別統計
    
echo "<table border=1 cellspacing=0 width=100%>\n";
    echo
"<caption>日別統計(最大 $date_max 日)</caption>\n";
    echo
"<tr><td align=center bgcolor=#ffccff><font size=2>日付</font></td>\n";
    echo
"<td align=center bgcolor=#ffccff><font size=2>カウント</font></td>\n";
    echo
"<td align=center bgcolor=#ffccff><font size=2>ポイント</font></td>\n";
    echo
"<td align=center bgcolor=#ffccff><font size=2>グラフ</font></td></tr>\n";
    if(
$date_max > count($DATE)){ $date_max = count($DATE); }
    for(
$i=0; $i<$date_max; $i++){
        list(
$d,$c) = split("<>", $DATE[$i]);
        if(
$v_cnt == 0){
            
$per = 0;
            
$chrlen = 0;
        } else {
            
$per = $c / $v_cnt * 100;
            
$chrlen = $c / $max_date * $graphview;
        }
        echo
"<tr><td>$d</td>\n";
        echo
"<td align=right>$c</td>\n";
        echo
"<td align=right>\n";
        
printf("%10.1f", $per);
        echo
" %</td>\n";
        echo
"<td><img src=$graph_img width=$chrlen height=10></td></tr>\n";
    }
    echo
"</table>\n";
    echo
"</td><td width=2%></td><td valign=top width=49%>\n";
    
//ホスト別統計
    
echo "<table border=1 cellspacing=0 width=100%>\n";
    echo
"<caption>ホスト別統計(最大 $hostview 件)</caption>\n";
    echo
"<tr><td align=center bgcolor=#ffccff><font size=2>ホスト名</font></td>\n";
    echo
"<td align=center bgcolor=#ffccff><font size=2>カウント</font></td>\n";
    echo
"<td align=center bgcolor=#ffccff><font size=2>ポイント</font></td>\n";
    echo
"<td align=center bgcolor=#ffccff><font size=2>グラフ</font></td></tr>\n";
    if(
$hostview > count($HOST)){ $hostview = count($HOST); }
    for(
$i=0; $i<$hostview; $i++){
        list(
$s,$h,$c) = split("<>", $HOST[$i]);
        if(
$c != 0){
            if(
$v_cnt == 0){
                
$per = 0; $chrlen = 0;
            } else {
                
$per = $c / $v_cnt * 100;
                
$chrlen = $c / $max_host * $graphview;
            }
        }
        echo
"<tr><td>$h</td>\n";
        echo
"<td align=right>$c</td>\n";
        echo
"<td align=right>\n";
        
printf("%10.1f", $per);
        echo
" %</td>\n";
        echo
"<td><img src=$graph_img width=$chrlen height=10></td></tr>\n";
    }
    echo
"</table>\n";
    echo
"</td></tr></table><br>\n";
    
//ブラウザ別統計
    
echo "<table border=1 cellspacing=0 width=90%>\n";
    echo
"<caption>ブラウザ別統計(最大 $agentview 件)</caption>\n";
    echo
"<tr><td align=center bgcolor=#ffccff><font size=2>ブラウザ名</font></td>\n";
    echo
"<td align=center bgcolor=#ffccff><font size=2>カウント</font></td>\n";
    echo
"<td align=center bgcolor=#ffccff><font size=2>ポイント</font></td>\n";
    echo
"<td align=center bgcolor=#ffccff><font size=2>グラフ</font></td></tr>\n";
    if(
$agentview > count($AGENT)){ $agentview = count($AGENT); }
    for(
$i=0; $i<$agentview; $i++){
        list(
$s,$a,$c) = split("<>", $AGENT[$i]);
        if(
$c != 0){
            if(
$v_cnt == 0){
                
$per = 0; $chrlen = 0;
            } else {
                
$per = $c / $v_cnt * 100;
                
$chrlen = $c / $max_agent * $graphview;
            }
        }
        echo
"<tr><td>$a</td>\n";
        echo
"<td align=right>$c</td>\n";
        echo
"<td align=right>\n";
        
printf("%10.1f", $per);
        echo
" %</td>\n";
        echo
"<td><img src=$graph_img width=$chrlen height=10></td></tr>\n";
    }
    echo
"</table><br>\n";
    
//リンク元別統計
    
echo "<table border=1 cellspacing=0 width=90%>\n";
    echo
"<caption>リンク元別統計(最大 $hrefview 件)</caption>\n";
    echo
"<tr><td align=center bgcolor=#ffccff><font size=2>リンク元</font></td>\n";
    echo
"<td align=center bgcolor=#ffccff><font size=2>カウント</font></td>\n";
    echo
"<td align=center bgcolor=#ffccff><font size=2>ポイント</font></td>\n";
    echo
"<td align=center bgcolor=#ffccff><font size=2>グラフ</font></td></tr>\n";
    if(
$hrefview > count($HREF)){ $hrefview = count($HREF); }
    for(
$i=0; $i<$hrefview; $i++){
        list(
$s,$l,$c) = split("<>", $HREF[$i]);
        if(
$c != 0){
            if(
$v_cnt == 0){
                
$per = 0; $chrlen = 0;
            } else {
                
$per = $c / $v_cnt * 100;
                
$chrlen = $c / $max_href * $graphview;
            }
        }
        echo
"<tr><td>\n";
        if(
$l){
            echo
"<a href=$l target=_blank>" . $l . "</a>";
        }else{
            echo
"none";
        }
        echo
"</td>\n";
        echo
"<td align=right>$c</td>\n";
        echo
"<td align=right>\n";
        
printf("%10.1f", $per);
        echo
" %</td>\n";
        echo
"<td><img src=$graph_img width=$chrlen height=10></td></tr>\n";
    }
    echo
"</table></center><br>\n";
    echo
"<div align=right><font size=-1>Powered by <a href=\"http://www.komonet.ne.jp/\">KOMONET</a></font></div>\n";
    echo
"</body></html>\n";
    unset(
$v_data);
} else {
    
//クッキー書き込み
    
$cookie = $date_now;
    
setcookie("Cookie_ana","$cookie");
    
//データ書き込み
    
if($Cookie_ana != $date_now){
        
//ホスト名を取得
        
$host = getenv("REMOTE_HOST");
        
$addr = getenv("REMOTE_ADDR");
        if(
$host == "" || $host ==$addr){
            
$host = gethostbyaddr($addr);
            if(
$host != $addr){
                if(
eregi(".+\.(.+)\.(.+)\.(.+)$", $host, $regs)){
                    
$host = "*." . $regs[1] . "." . $regs[2] . "." . $regs[3];
                }elseif(
eregi(".+\.(.+)\.(.+)$", $host, $regs)){
                    
$host = "*." . $regs[1] . "." . $regs[2];
                }elseif(
eregi(".+\.(.+)$", $host, $regs)){
                    
$host = "*." . $regs[1];
                }else{
                    
$host = "on the internet";
                }
            }else{
                
$host = $addr;
            }
        }
        
//訪問者のブラウザを取得
        
$agent = getenv("HTTP_USER_AGENT");
        
//リンク元を取得
        
$href = getenv("QUERY_STRING");
        
$ana_data = file($data_file);
        
$value = "$date_now<>$host<>$agent<>$href<>$hour\n";
        
$fp = fopen($data_file, "w");
        
rewind($fp);
        
fputs($fp, $value);
        
//最大記録数の調整
        
if($max <= count($ana_data)){
            
$ana_num = $max - 1;
        }else{
            
$ana_num = count($ana_data);
        }
        for(
$i = 0; $i < $ana_num; $i++){
            
fputs($fp, $ana_data[$i]);
        }
        
fclose($fp);
        unset(
$ana_data);
    }
    
header("Content-type: image/jpg");
    
readfile($gazou);
}
?>