#!/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_ }