#!/usr/local/bin/perl
#
# I_AXS ver 1.1 (SSI式アクセス解析)
#
# Written by いっちゃん
# http://ww.digital-waseda.org/~ichihara/
#
# i_axs.cgi (アクセスログ表示)
require "/usr/local/apache/htdocs/access/i_axss.pl"; # 絶対パスで指定
&init;
#-------------------------------------------------------------------#
$max_l="5"; # ログ表示件数(指定しない場合)
$this="http://nis-lab.is.s.u-tokyo.ac.jp/access/i_axs.cgi"; # このスクリプトの絶対URL
$title='アクセス統計 I_AXS'; # 表示するタイトル
print "Content-type: text/html\n\n";
print "
$title";
print '';
print "\n";
print ''
. "\n";
print "$title
\n";
if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); } else { $buffer = $ENV{'QUERY_STRING'}; }
@pairs = split(/&/,$buffer);
foreach $pair (@pairs) {
($name,$value)=split(/=/,$pair);$value=~ tr/+/ /;
$value=~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$FORM{$name} = $value;
}
if($FORM{'max'} ne ''){$max_l=$FORM{'max'};}
@lines=&read_f($log) ;$max =@lines;
@lined=&read_f($log_d);$max_d=@lined;
$mode=$FORM{'mode'};
$min=$FORM{'min'};if($min eq ''){$min="0";}
if($mode ne ''){
# if($ref ne $this){&error("不当なアクセスです。");}
# else {
if($mode<4){&log_s;}else{&log_d;}
# }
}else{
print <<"_EOF_";
表\示メニュー
- 最新$max件の詳細情報
- 最新$max_d日間集計したアクセス情報
_EOF_
}
print "
\n\n";
exit;
sub log_s {
$k=0;
foreach $line(@lines){
@d=split(/<>/,$line);
if($d[$mode] ne ""){$ds{($d[$mode])[0]}++;$k++;}
}
@d=("時間帯","リンク元","リモートホスト","利用ブラウザ");
print "$d[$mode]別のアクセス数
\n";
print "サンプル数:$k\n";
print "
\n";
print "$d[$mode] | 件数 | 割合 | グラフ |
\n";
if($mode eq "0"){
$min="0";foreach(sort keys %ds){&log_ss;}
}
else{foreach(sort{$ds{$b}<=>$ds{$a}}keys %ds){&log_ss;}}
print "
\n";
}
sub log_ss {
if($ds{$_}>=$min){
$percent=int(int(10000*($ds{$_}/$k))/100);
$percent=sprintf("%.1f%",$percent);
$img=int($percent*10);
local($l)= $_;
if (length($l) > 50) { $l = substr($l,0,48); $l = $l . '..'; }
print "";
if($mode eq "1"){print "$l";}
else{print "$l";}
print " | $ds{$_} | $percent | |
\n";
}
}
sub log_d {
$j=0;$k=0;$mode-=4;if($min==0 || $mode ne "1"){$min=@lined;}
for($i=0;$i<$min;$i++){
@d=split(/<>/,$lined[$i]);
$ds[$d[$mode]]+=$d[3];$k+=$d[3];
if($j<$d[$mode]+1){$j=$d[$mode]+1;}
}
@d=("月","日","曜日");
print "$d[$mode]別のアクセス数
\n";
print "サンプル数:$k\n";
print "
\n";
print "$d[$mode] | 件数 | 割合 | グラフ |
\n";
if($mode==2){
@d=("日","月","火","水","木","金","土");&log_ds(0,$j);
}else{
@d=split(/<>/,$lined[0]);$h=$d[$mode]+1;
&log_ds($h,$j);&log_ds(0,$h);
}
print "
\n";
}
sub log_ds {
for($i=$_[0];$i<$_[1];$i++){
if($ds[$i]>0){
$percent=int(int(10000*($ds[$i]/$k))/100);
$percent=sprintf("%.1f%",$percent);
$img=int($percent*10);
print "";
if($mode eq "2"){print "$d[$i]";}else{print "$i";}
print " | $ds[$i] | $percent | |
\n";
}
}
}