#!/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 "


I_AXS ver 1.1

\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 "\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 "
$d[$mode]件数割合グラフ
\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 "\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 "
$d[$mode]件数割合グラフ
\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"; } } }