#!/usr/local/bin/perl # アクセスログファイルの表示 # id=aclogh.cgi # update. 97.11.8 # 1日平均表示追加 97.11.8 $file = "/dialup/chichibu/cgi-bin/access.log"; # 時間帯別は全配列表示したいので先に0をセットする $jibetu{0}=0; $jibetu{1}=0; $jibetu{2}=0; $jibetu{3}=0; # ログデータを読み各連想配列に加算する open(DB,"$file"); flock(DB,2); $cnt=0; while () { chop($_); ($dt1,$dt2,$dt3,$yy,$mm,$dd,$ji,$fun,$byo) = split(/\,/,$_); $agent{$dt1}++; $referer{$dt2}++; $host{$dt3}++; # 年月別件数 $yy = sprintf("%.4d",$yy); $mm = sprintf("%.2d",$mm); $dd = sprintf("%.2d",$dd); # 年と月をつける $tukibetu{$yy.$mm}++; # 日別件数 # 月と日をつける $hibetu{$mm.$dd}++; # 時間帯別 if ($ji > 6 && $ji <= 12) { $tn = 0 } elsif ($ji > 12 && $ji <= 18) { $tn = 1 } elsif ($ji > 18 && $ji <= 24) { $tn = 2 } else { $tn = 3 } # 該当する配列に加算 $jibetu{$tn}++; # 1件目の終了時刻セット $cnt++; $stime = "$yy年$mm月$dd日$ji時$fun分$byo秒"; if ($cnt == 1) { $etime = $stime ; } } # end of while flock(DB,8); close(DB); # 時間帯別名 $jname{0}=" 6時から12時"; $jname{1}="12時から18時"; $jname{2}="18時から24時"; $jname{3}=" 0時から 6時"; # 表示出力処理 print "Content-type: text/html\n\n"; print < アクセス統計 11/2

アクセス統計


EOM # 期間 print "\n"; print "\n"; print "\n"; print "
開始日時終了日時登録件数
$stime$etime$cnt
\n\n

\n\n"; # リンク元 print "\n"; print "\n"; @sortedreferer = sort by_referer keys(%referer); $no=0; foreach (@sortedreferer) { # 1位は青 $no++; if ($no == 1) { $iro="#0000FF" ; } else { $iro="#000000" ; } print ''; print ''."\n"; print ''."\n"; print ''."\n"; print ''; } print "
順位リンク元累計
'.$no.''.$_.''.$referer{$_}.'
\n\n

\n\n"; # ブラウザ名 print "\n"; print "\n"; @sortedagent = sort by_agent keys(%agent); $no=0; foreach (@sortedagent) { # 1位は青 $no++; if ($no == 1) { $iro="#0000FF" ; } else { $iro="#000000" ; } print ''; print ''."\n"; print ''."\n"; print ''."\n"; print ''; } print "
順位ブラウザ名累計
'.$no.''.$_.''.$agent{$_}.'
\n\n

\n\n"; # ホスト名 print "\n"; print "\n"; @sortedhost = sort by_host keys(%host); $no=0; foreach (@sortedhost) { # 1位は青 $no++; if ($no == 1) { $iro="#0000FF" ; } else { $iro="#000000" ; } print ''; print ''."\n"; print ''."\n"; print ''."\n"; print ''; } print "
順位ホスト名累計
'.$no.''.$_.''.$host{$_}.'
\n"; print '

'; # 月別 # その中で一番多い月の件数を求める @sorttukisu = sort by_tuki keys(%tukibetu); # 件数のみを記録する $no=0; foreach (@sorttukisu) { # 1番目のデータのみ $no++; if ($no == 1) { $tukimax=$tukibetu{$_} ; last; } } # end of foreach # 年月の昇順にソートする @tukikey = keys(%tukibetu); @sorttuki = sort @tukikey; print "\n"; print "\n"; foreach (@sorttuki) { # 1位は青 if ($tukibetu{$_} == $tukimax ) { $iro="#0000FF" ; } else { $iro="#000000" ; } # ****年**月の形にする $yy=substr($_,0,4); $mm=substr($_,4,2); $x=index($mm,"0"); if ($x == 0) { $mm=~ s/0/ /; } $ym=$yy."年".$mm."月"; print ''; print ''."\n"; print ''."\n"; print ''; } # end of foreach print "
月 別累計
'.$ym.''.$tukibetu{$_}.'
\n"; print '

'; # 日別 # その中で一番多い日の件数を求める @sorthisu = sort by_hi keys(%hibetu); # 件数のみを記録する $no=0; foreach (@sorthisu) { # 1番目のデータのみ $no++; if ($no == 1) { $himax=$hibetu{$_} ; last; } } # end of foreach # 年月の昇順にソートする @hikey = keys(%hibetu); @sorthi = sort @hikey; print "\n"; print "\n"; # 件数合計 $goukei = 0; foreach (@sorthi) { # 1位は青 if ($hibetu{$_} == $himax ) { $iro="#0000FF" ; } else { $iro="#000000" ; } # **月**日の形にする $mm=substr($_,0,2); $x=index($mm,"0"); if ($x == 0) { $mm=~ s/0/ /; } $dd=substr($_,2,2); $x=index($dd,"0"); if ($x == 0) { $dd=~ s/0/ /; } $md=$mm."月".$dd."日"; # 件数加算 $goukei = $goukei + $hibetu{$_}; print ''; print ''."\n"; print ''."\n"; print ''; } # end of foreach # 1日平均を出す(四捨五入) $nisu = @sorthisu; if ($nisu > 0) { $heikin = ($goukei / $nisu) + 0.5; ($heikin,$dummy)=split(/\./,$heikin); } print ''; print ''."\n"; print ''."\n"; print ''; print "
日 別累計
'.$md.''.$hibetu{$_}.'
1日平均'.$heikin.'
\n"; print '

'; # 時間帯別 # その中で一番多い時間帯の件数を求める @sortjisu = sort by_ji keys(%jibetu); # 件数のみを記録する $no=0; foreach (@sortjisu) { # 1番目のデータのみ $no++; if ($no == 1) { $jimax=$jibetu{$_} ; last; } } # end of foreach # 時間帯の昇順にソートする @jikey = keys(%jibetu); @sortji = sort @jikey; print "\n"; print "\n"; foreach (@sortji) { # 1位は青 if ($jibetu{$_} == $jimax ) { $iro="#0000FF" ; } else { $iro="#000000" ; } print ''; print ''."\n"; print ''."\n"; print ''; } # end of foreach print "
時間帯別累計
'.$jname{$_}.''.$jibetu{$_}.'
\n"; print "\n\n"; # ブラウザ数ソート sub by_agent { if ($agent{$b} != $agent{$a}) { $agent{$b} <=> $agent{$a}; } else { $a cmp $b; } } # end of sort # リンク元数ソート sub by_referer { if ($referer{$b} != $referer{$a}) { $referer{$b} <=> $referer{$a}; } else { $a cmp $b; } } # end of sort # ホスト数ソート sub by_host { if ($host{$b} != $host{$a}) { $host{$b} <=> $host{$a}; } else { $a cmp $b; } } # end of sort # 月別数ソート sub by_tuki { $tukibetu{$b} <=> $tukibetu{$a}; } # 日別数ソート sub by_hi { $hibetu{$b} <=> $hibetu{$a}; } # 時間帯別数ソート sub by_ji { $jibetu{$b} <=> $jibetu{$a}; } ################ end of script ###################