#!/usr/bin/perl
#####DA-Counter-Single#################################
###種別:CGIスクリプト(アクセスカウンター) ###
###名称:DA-Counter-Single ###
###バージョン:1.00 ###
###配布開始日:2003年1月31日 ###
###価格:無料 ###
###配布元:【Do-ASAP!】(http://www.do-asap.com/) ###
###著作権者:川田洋介(ykawada@do-asap.com) ###
###再配布:自由 ###
###改変:著作権表示以外は自由 ###
#######################################################
##############
# 設定項目 #
##############
###基本設定ファイル###
$inifile='./axscnt.ini.cgi';
###日本語処理ライブラリー###
$jcodelib='./jcode.pl';
###共通処理サブルーチン集###
$common='common.pl';
###文字コード###
$kcode='sjis';
##############
# 設定完了 #
##############
#####本処理#####
##ライブラリーの取り込み##
require "$jcodelib";
require "$common";
require "$gifcatlib";
require "$inifile";
##フォームデータの解析##
&init_form($kcode);
##フォームデータの変数化##
$useraction=$form{'ua'};
$passin=$form{'passin'};
$mode=$form{'mode'};
$menu_sub=$form{'menu_sub'};
$year=$form{'year'};
$month=$form{'month'};
$day=$form{'day'};
##設定情報取得##
&get_personal_info;
if($useraction eq 'check'){
$ret=&check_password($passin);
if($ret eq 0){
$useraction='menu';
open(AUTH,">$basedir/authorized");
&f_lock(AUTH);
print AUTH "$ENV{'REMOTE_ADDR'}";
&f_unlock(AUTH);
close(AUTH);
chmod(0666,"$basedir/authorized");
}else{
print "Content-type: text/html\n\n";
&print_error(" パスワードが違います...
\n");
exit(0);
}
}
$ret=&check_authorized;
if($ret eq 0){
$opt_passwd=0;
}
if($useraction ne ''){
if($opt_passwd eq 1){
print "Content-type: text/html\n\n";
&show_login_page;
exit(0);
}
}
if($useraction eq ''){
print "Content-type: image/gif\n\n";
&count_axs;
}elsif($useraction eq 'menu'){
print "Content-type: text/html\n\n";
&split_frame;
}else{
print "Content-type: image/gif\n\n";
&count_axs;
}
exit(0);
###サブルーチン###
#アクセス数のカウント#
sub count_axs{
local($sec,$min,$hour,$day,$mon,$year);
local($datafile,$temp,$ret,$count,$total_count,$clock,$gap,$n);
local(@total,@gif);
chmod(0666,"$basedir/user.ini.cgi");
if(!-e "$basedir/user.ini.cgi"){
exit(0);
}
($sec,$min,$hour,$day,$mon,$year)=localtime(time);
$year+=1900;
$mon++;
if($mon<10){$mon="0$mon";}
if($day<10){$day="0$day";}
$datafile="$year$mon$day";
if(!-e "$basedir/$datafile"){
open(DAT,">$basedir/$datafile");
print DAT 0;
close(DAT);
}
$temp="$datafile\.tmp";
chmod(0777,"$basedir");
if(!-e "$basedir/$temp"){
open(TMP,">$basedir/$temp");
&f_lock(TMP);
seek(TMP,0,0);
($part1,$part2,$part3,$part4)=split(/\./,$ENV{'REMOTE_ADDR'});
$IPAddr=pack("C4",$part1,$part2,$part3,$part4);
$IPAddr=$ENV{'REMOTE_ADDR'};
print TMP "$IPAddr\n";
seek(TMP,0,0);
&f_unlock(TMP);
close(TMP);
chmod(0666,"$basedir/$temp");
}
if($cor eq 'no'){
open(TMP,">>$basedir/$temp");
&f_lock(TMP);
($part1,$part2,$part3,$part4)=split(/\./,$ENV{'REMOTE_ADDR'});
$IPAddr=pack("C4",$part1,$part2,$part3,$part4);
$IPAddr=$ENV{'REMOTE_ADDR'};
print TMP "$IPAddr\n";
&f_unlock(TMP);
close(TMP);
$ret=&check_log;
}else{
$ret=1;
}
chmod(0666,"$basedir/$datafile");
open(DAT,"<$basedir/$datafile");
$count=;
close(DAT);
open(DAT,">$basedir/$datafile");
&f_lock(DAT);
if($ret eq 1){
$count++;
}
print DAT $count;
&f_unlock(DAT);
close(DAT);
chmod(0666,"$basedir/$datafile");
if(!-e "$basedir/total.cnt"){
$total_count=&get_axscount;
open(TOTAL,">$basedir/total.cnt");
&f_lock(TOTAL);
print TOTAL "$total_count\n";
print TOTAL "0";
&f_unlock(TOTAL);
close(TOTAL);
}else{
chmod(0666,"$basedir/total.cnt");
open(TOTAL,"<$basedir/total.cnt");
@total=;
close(TOTAL);
chmod(0666,"$basedir/total.cnt");
foreach(@total){
~s/\n//g;
}
($total_count,$clock)=@total;
$clock++;
if($clock > 500){
$clock=0;
$total_count=&get_axscount;
}
if($ret eq 1){
$total_count++;
}
}
open(TOTAL,">$basedir/total.cnt")
&f_lock(TOTAL);
print TOTAL "$total_count\n";
print TOTAL "$clock";
&f_unlock(TOTAL);
close(TOTAL);
if($figure > length($total_count)){
$gap=$figure-length($total_count);
for($i=1;$i<=$gap;$i++){
push(@gif,"$img_dir/0.gif");
}
}
for($i=0;$i<=length($total_count);$i++){
$n=substr($total_count,$i,1);
if($n ne ''){
push(@gif,"$img_dir/$n.gif");
}
}
binmode(STDOUT);
print &gifcat'gifcat(@gif);
}
#アクセスログのチェック#
sub check_log{
local(@old_log);
local($i,$rt,$gap);
chmod(0666,"$basedir/$temp");
if(!open(TMP,"<$basedir/$temp")){
close(TMP);
}
@old_log=;
close(TMP);
foreach(@old_log){
~s/\n//g;
}
($part1,$part2,$part3,$part4)=split(/\./,$ENV{'REMOTE_ADDR'});
$IPAddr=pack("C4",$part1,$part2,$part3,$part4);
$IPAddr=$ENV{'REMOTE_ADDR'};
$rt=0;
$lognum--;
if($lognum < 0){
$lognum=0;
}
for($i=0;$i<=$lognum;$i++){
if($old_log[$i] eq $IPAddr){
return 0;
}
}
open(TMP,">$basedir/$temp");
&f_lock(TMP);
print TMP "$IPAddr\n";
$gap=$#old_log-$lognum;
if($gap <= 0){
$gap=$#old_log;
}
for($i=0;$i<=$gap;$i++){
print TMP "$old_log[$i]\n";
}
&f_unlock(TMP);
close(TMP);
chmod(0666,"$basedir/$temp");
return 1;
}
#フレーム分割#
sub split_frame{
local($sec,$min,$hour,$day,$mon,$year)=localtime(time);
local($main_url);
$year+=1900;
$mon++;
if($mon < 10){$mon="0$mon";}
if($day < 10){$day="0$day";}
$main_url="$axscntman?ua=calender&year=$year&month=$mon";
print <<"_HTML_";
DA-Counter-Sigle
_HTML_
}