#!/usr/bin/perl #┌───────────────────────────────── #│ DAY COUNTER-EX v3.5 (2003/07/04) #│ Copyright (c) KentWeb #│ webmaster@kent-web.com #│ http://www.kent-web.com/ #└───────────────────────────────── $ver = 'DAY COUNTER-EX v3.5'; #┌───────────────────────────────── #│ [注意事項] #│ 1. このスクリプトはフリーソフトです。このスクリプトを使用した #│ いかなる損害に対して作者は一切の責任を負いません。 #│ 2. 設置に関する質問はサポート掲示板にお願いいたします。 #│ 直接メールによる質問は一切お受けいたしておりません。 #└───────────────────────────────── #============# # 設定項目 # #============# # ログファイル $logfile = "./dayx.dat"; # 日次記録ファイル $dayfile = "./day.dat"; # 月次記録ファイル $monfile = "./mon.dat"; # 集計一覧からの戻り先 $home = "../index.html"; # 集計一覧のタイトル名 $title = "アクセス集計一覧"; # 集計ファイル一覧 $script = './dayxmgr.cgi'; # タイトル文字色 $t_color = "#008080"; # グラフ画像 # → 絶対パスなら http:// から書く $graph1 = "./blue.gif"; $graph2 = "./red.gif"; # 月間グラフ幅の調整 # 1か月平均 4桁で50〜100 5桁で200〜500程度 $mKEY = 2000; # 日計グラフ幅の調整 # 1日平均 2桁で1〜2 3桁で5〜10 4桁で30〜60程度 $dKEY = 200; # bodyタグ $body = ''; # パスワード # → ここに英数字でパスワードを記述すると「閲覧」には # このパスワードが必須となります。 $pass = '621030'; #============# # 設定完了 # #============# # パスワード制限 if ($pass ne "") { local($key, $val, $buf); read(STDIN, $buf, $ENV{'CONTENT_LENGTH'}); %in=(); foreach ( split(/&/, $buf) ) { ($key, $val) = split(/=/); $val =~ s/&/&/g; $val =~ s/"/"/g; $val =~ s//>/g; $in{$key} = $val; } if ($in{'pass'} eq "") { &header; print "

パスワードを入力して下さい

\n"; print "
\n"; print "\n"; print "
\n"; print "\n"; exit; } elsif ($pass ne $in{'pass'}) { &error("パスワードが違います"); } } # ログファイル読み込み open(IN,"$logfile") || &error("Open Error : $logfile"); $data = ; close(IN); ($day,$yes,$to) = split(/<>/, $data); # 時間取得 $ENV{'TZ'} = "JST-9"; ($mday,$mon,$year,$wday) = (localtime(time))[3..6]; @week = ('Sun','Mon','Tue','Wed','Thu','Fri','Sat'); $date = sprintf("%02d/%02d (%s) ", $mon+1,$mday,$week[$wday]); $D_Y = sprintf("%04d/%02d", $year+1900,$mon+1); # 日次アクセスファイルを読み込み open(IN,"$dayfile") || &error("Open Error : $dayfile"); @dayfile = ; close(IN); push(@dayfile,"$date<>$to<>\n"); # 月間アクセスファイルを読み込み open(IN,"$monfile") || &error("Open Error : $monfile"); @monfile = ; close(IN); $under = pop(@monfile); if ($under =~ /^(\d+)\/(\d+)<>(\d+)/) { $Y="$1/$2"; $C=$3; } if ($Y eq $D_Y) { $C2 = $C + $to; push(@monfile,"$Y<>$C2<>\n"); } else { push(@monfile,"$D_Y<>$to<>\n"); } # HTMLを表示 &header; print <<"EOM";
戻る

$title

[日次アクセス一覧] [月次アクセス一覧]

  日次アクセス一覧

EOM $flag=0; $tochu=0; $i=0; foreach (@dayfile) { $i++; chop; ($m_d,$dcnt) = split(/<>/); if ($i == 1 && $m_d =~ /^(\d+)\/(\d+)/) { if ($2 != 1) { $tochu=1; } } # グラフ幅を指定 if ($dcnt > 0) { $width = int($dcnt / $dKEY); } else { $width=1; } if ($width < 1) { $width=1; } # 桁処理 $dcnt = &filler($dcnt); # 色変更 $m_d =~ s/Sat/Sat<\/font>/; $m_d =~ s/Sun/Sun<\/font>/; print ""; print "\n"; } print <<"EOM";
$m_d   $dcnt  


  月次アクセス一覧

EOM $flag=0; foreach (@monfile) { ($y_m,$mcnt) = split(/<>/); ($year,$mon) = split(/\//, $y_m); if ($_ eq $monfile[$#monfile]) { if ($day == 1) { $avr = ' - '; } else { if ($tochu) { $waru = @dayfile-1; } else { $waru = $day-1; } if ($C > 0) { $avr = int (($C / $waru) +0.5); $avr = &filler($avr); } else { $avr = ' - '; } } } else { $lastday = &LastDay($year, $mon); $avr = int (($mcnt / $lastday) +0.5); $avr = &filler($avr); } # グラフ幅を指定 if ($mcnt > 0) { $width = int($mcnt / $mKEY); } else { $width=1; } if ($width < 1) { $width=1; } # 桁処理 $mcnt = &filler($mcnt); if ($year ne $year2) { print "\n"; } print ""; print ""; print "\n"; $year2 = $year; } ## 著作権表示(削除改変禁止) print <<"EOM";
年月  月間   日平均  グラフ

$y_m$mcnt$avr 

Copyright (c) KentWeb
$ver
EOM exit; #----------------# # 月の末日計算 # #----------------# sub LastDay { local($year, $mon) = @_; local($lastday); $lastday = (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31) [$mon - 1] + ($mon == 2 && (($year % 4 == 0 && $year % 100 != 0) || $year % 400 == 0)); $lastday; } #--------------# # HTMLヘッダ # #--------------# sub header { print "Content-type: text/html\n\n"; print <<"EOM"; $title $body EOM } #----------------# # 桁区きり処理 # #----------------# sub filler { local($_) = $_[0]; 1 while s/(.*\d)(\d\d\d)/$1,$2/; $_; } #--------------# # エラー処理 # #--------------# sub error { &header; print <<"EOM";

ERROR !

$_[0]
EOM exit; } __END__