#!/usr/local/bin/perl # アクセスログファイルの表示(ホスト名累計) # id=aclogh3.cgi # update. 97.11.29 # 前次頁ボタン表示処理変更 97.11.29 # 日本語コード変換ライブラリ(v2.0)の指定 # &ReadParse命令で、$in{ }の変数にフォーム入力データが格納される require 'cgi-lib.pl'; require 'jcode.pl'; &ReadParse; # 設置するURLを設定 $reload = 'http://www0.kumagaya.or.jp/cgi-bin/users/chichibu/aclogh3.cgi'; $bkhmpg = "http://www.kumagaya.or.jp/~chichibu/cgi.html"; $file = "/dialup/chichibu/cgi-bin/access2.log"; # 常にページ数を入れる $page=$in{'page'}; # 表示行数の初期値 if ($in{'gyosu'} == 0) { $in{'gyosu'} = 25 } #################################### # # # メインルーチン(処理の分岐) # # # #################################### if ($in{'action'} eq 'meisai') { &meisai; } elsif ($in{'action'} eq 'next') { &next; } elsif ($in{'action'} eq 'back') { &back; } elsif ($in{'action'} eq 'narabi') { &narabi; } else { &meisai; } ############################################# # # # ログデータを読む           # # # ############################################# sub read { # ログデータを読み各連想配列に加算する open(DB,"$file"); flock(DB,2); $max = 0; while () { ($host,$cnt,$yy,$mm,$dd,$ji,$fun,$byo) = split(/\,/,$_); $stime = "$yy年$mm月$dd日$ji時$fun分$byo秒"; $kensu{$host} = $cnt ; $hizuke{$host} = $stime ; $max++; } # end of while flock(DB,8); close(DB); # 配列が0から始まるので配列数として−1する $tmax = $max - 1; } # end of read ############################################# # # # ホスト累計表示            # # # ############################################# sub meisai { &read; # 昇順にする if ($in{'sortkb'} == 1) { @lines = sort by_hostmei keys(%kensu);} else { @lines = sort by_host keys(%kensu);} # 開始日 $page_flg=0; # 表示頁変数に何もはいっていない場合 if ($page eq '') { $page = 1; } # 最大頁数 if ($in{'gyosu'} == 0) { $in{'gyosu'}=20 ;} $page_max = ($tmax / $in{'gyosu'}) + 1; # 整数部をとりだす ($page_max,$dummy)=split(/\./,$page_max); # 最初のページか最終ページの場合のチェック if ($page <= 1) { $page=1; $page_flg=1; } if ($page >= $page_max) { $page=$page_max; $page_flg=2; } # 表示開始ai最初は0から) $start = $in{'gyosu'} * ($page - 1) ; # 表示終了 $end = $start + $in{'gyosu'} - 1; if ($end > $tmax) { $end = $tmax ; } # 表示出力処理 print "Content-type: text/html\n\n"; print < ホスト別累計表示 11/29

ホスト別累計表示


EOM # ボタンを横に並べる print ''; print ''; # 前頁表示 print ''; # 次頁表示 print ''; # 表示順序 print ''; # 1回で表示する行数 print '' . "\n"; print '' . "\n"; print '' . "\n"; print '' . "\n"; print ''. "\n"; print '' . "\n"; print ''; print ''; # 最初の画面に戻る print ''; print ''; # ページ案内 print ''; print '
'; # 1頁目は前頁表示なし if ($page > 1) { print '
' . "\n"; print '' . "\n"; print '' . "\n"; print '' . "\n"; print '' . "\n"; print '' . "\n"; print '
'; } print '
'; # 最終ページは次頁表示なし if ($page < $page_max) { print '
' . "\n"; print '' . "\n"; print '' . "\n"; print '' . "\n"; print '' . "\n"; print '' . "\n"; print '
'. "\n"; } print '
'; print '
' . "\n"; print '' . "\n"; print '' . "\n"; print '' . "\n"; print '' . "\n"; if ($in{'sortkb'} == 0) { $sortkbn = "ホスト名順"; } else { $sortkbn = "件数順"; } print '' . "\n"; print '
'. "\n"; print '
'; print '
' . "\n"; print '' . "\n"; print '
'; print '
 '; if ($page_flg == 1) { print "最初のページです\n"; } elsif ($page_flg == 2) { print "最終ページです\n"; } else { print "<次ページあり>\n"; } print '
'; print '
'; print "\n"; print "\n"; print "\n"; print "\n"; print "
登録件数表示頁最終頁
$max$page$page_max
\n\n

\n\n"; print "\n"; print "\n"; # 明細データ表示 foreach ($start .. $end) { # データを各変数に代入する $host=$lines[$_]; $cnt = $kensu{$host} ; $stime = $hizuke{$host} ; # その他 if ($host eq "zzzzz1") { $host = "数字だけのホスト名" ;} if ($host eq "zzzzz2") { $host = "最大登録数超過件数" ;} $no=$_+1; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; } # end of foreach print "
ホスト名アクセス累計最終更新日時
$no$host$cnt$stime
\n"; # 表示範囲は配列番号+1 $i = $start + 1; $j = $end + 1; if ($in{'sortkb'} == 1) { print "ホスト名順データの$i番目から$j番目までです。

\n"; } else { print "累計数降順データから$i番目から$j番目までです。

\n"; } if ($page_flg == 1) { print "  <これより前はありません>

\n"; } if ($page_flg == 2) { print "  <これ以降はありません>

\n"; } print "\n\n"; } # end of meisai ##################### # ブラウザ数ソート # ##################### # ホスト数ソート sub by_host { if ($kensu{$b} != $kensu{$a}) { $kensu{$b} <=> $kensu{$a}; } else { $a cmp $b; } } # end of sort # ホスト名ソート sub by_hostmei { $a cmp $b; } ########################################## # # # 次ページ表示処理         # # # ########################################## sub next { $page++; &meisai; } # end of sub ########################################## # # # 前ページ表示処理         # # # ########################################## sub back { if ($page > 1) { $page--; } &meisai; } # end of sub ########################################## # # # 表示順序の変更指示        # # # ########################################## sub narabi { if ($in{'sortkb'} == 0) { $in{'sortkb'} = 1; } else { $in{'sortkb'} = 0; } &meisai; } # end of sub ################ end of script ###################