#!/usr/local/bin/perl # CGIでアクセス制限2 vers.2用ログ表示プログラム # (c)rescue.ne.jp log.cgi is Free. # http://www.rescue.ne.jp/ #■ 認証ログファイルの設定 $file = './log.csv'; #■ 1ページの表示数 $page = 20; #--------------------------------------------------------------------- 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); $FORM2{$name} = $value; $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $value =~ s/\n//g; $value =~ s/\r//g; $value =~ s/\t//g; $value =~ s/\,//g; $FORM{$name} = $value; } #------------------------------------ if (!open(IN,$file)) { &error('エラー','ログを開けません.'); } @BASE = ; close(IN); if ($FORM{'FF'} eq '') { $FF = 0; } else { $FF = $FORM{'FF'}; } $TO = $FF + $page - 1; if ($TO > $#BASE) { $TO = $#BASE; } $hit = 0; $next_num = ''; foreach $num ($FF .. $#BASE) { if ($hit == $page) { $next_num = $num; last; } else { push(@NEW,$BASE[$num]); $hit++; } } #------------------------------------ print "Content-type: text/html\n\n"; print <<"EOF"; ログの閲覧

《時系列ログ》

EOF if (!@NEW) { print "●データがありません.

\n"; } else { print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; foreach $data (@NEW) { $data =~ s/\n//g; ($date,$id,$target,$result) = split(/\,/,$data); print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; } print "
アクセス時刻ユーザ名対象認証
$date$id$target$result

\n"; if ($next_num ne '') { while (($key,$val) = each %FORM2) { if ($key ne 'FF') { $buf = "$buf&$key=$val"; } } print "

次の$page件

\n"; } } print "\n\n"; exit; #------------------------------------ sub error { print "Content-type: text/html\n\n"; print "$title\n"; print "\n"; print "

$_[0]

\n"; print "

$_[1]

\n"; print "ブラウザの[戻る]ボタンを押して前の画面に移動してください.

\n"; print "\n"; exit; }