# +---------+ # dopvSTAR* アクセスログ書き込みスクリプト | dsw.cgi | #--------------------------------------------------------------------+---------+ # 20070224 #------------------------------------------------------------------------------- #-------------------------------------------------------------------- 初期設定▼ $| = 1; require './dsi.pl'; &dsw_ini; # 一定の確率でログを取得しない if($rnd > 0) { srand(time/$$); $rnd2 = int(rand($rnd)); if($rnd2 != 0) { &put_data(0); exit; } } require './lib/require.pl'; #------------------------------------------------------------------------------- #------------------------------------------- Jcode.pm の対応自動判定&読み込み▼ &require($INI_require_path{'jcode'}); eval 'use Jcode;'; if($@ || $INI{'jc'} == 1){ $jcnv = 'jcode::convert'; $jh2z = 'jcode::h2z_euc'; }else{ $jcnv = 'Jcode::convert'; $jh2z = 'jcode::h2z_euc'; } #------------------------------------------------------------------------------- #---------------------------------------------------------------- 引数受け取り▼ if($ENV{'QUERY_STRING'} =~ /([a-zA-Z])=(.*)/){ #--- JavaScript + IMG式 or IMG式 or SSI式で情報が送られてきた場合 &require($INI_require_path{'get_form'}); %COM = &get_query; #--- カウンタ出力処理 if($COM{'count'} ne ''){ &require($INI_require_path{'count'}); if($COM{'count'} eq 'today'){ &put_cnt("$INI{'today_count_file_path'}","$INI{'cnt_tyday_keta'}"); exit; }elsif($COM{'count'} eq 'yesterday'){ &put_cnt("$INI{'yesterday_count_file_path'}","$INI{'cnt_tyday_keta'}"); exit; }elsif($COM{'count'} eq 'total'){ &put_cnt("$INI{'count_file_path'}","$INI{'cnt_total_keta'}"); exit; }elsif($COM{'count'} eq 'today_pg'){ &put_cnt("$INI{'page_count_dir'}$COM{'pg'}\_today\.cgi","$INI{'cnt_page_tyday_keta'}"); exit; }elsif($COM{'count'} eq 'yesterday_pg'){ &put_cnt("$INI{'page_count_dir'}$COM{'pg'}\_yesterday\.cgi","$INI{'cnt_page_tyday_keta'}"); exit; }elsif($COM{'count'} eq 'total_pg'){ &put_cnt("$INI{'page_count_dir'}$COM{'pg'}\_total\.cgi","$INI{'cnt_page_total_keta'}"); exit; } } #--- 無効な情報は取得しない foreach (keys %INI_deny_info){ if($INI_deny_info{$_} ne '' && $COM{$_} =~ /$INI_deny_info{$_}/){ $COM{$_} = ''; } } } #--- ログ取得モードの自動判定 if($COM{'md'} eq '' && $ENV{'SERVER_PROTOCOL'} eq 'INCLUDED'){ $COM{'md'} = 's'; }elsif($COM{'md'} eq '' && $COM{'pf'} ne ''){ $COM{'md'} = 'j'; } #--- ページ名の不正を変換 if($INI{'page_name_check'} == 1){ $COM{'pg'} =~ s/[^_a-zA-Z0-9-\/]//g; } #--- ページ名が空 if($COM{'pg'} eq ''){ if($INI{'page_name_deny'} == 0){ &put_data(0); exit; }else{ #--- ページ名が設定されていない時はパスをページ名とする $COM{'pg'} = $ENV{'REQUEST_URI'}; $COM{'pg'} =~ s/xx=\d+\&\&//; } } #--- SSI式ならロボットのみ取得判定とリンク元の取得 if($COM{'md'} eq 's'){ if($COM{'bot'} == 1){ &require($INI_require_path{'jua'}); %jua = &jua($ENV{'HTTP_USER_AGENT'}); if($jua{'platform'} ne '検索ロボット'){ &put_data(0); exit; } } if($COM{'nobot'} == 1){ if($COM{'bot'} != 1){ &require($INI_require_path{'jua'}); %jua = &jua($ENV{'HTTP_USER_AGENT'}); } if($jua{'platform'} eq '検索ロボット'){ &put_data(0); exit; } } $i = $ENV{'HTTP_REFERER'}; &$jcnv(\$i,'euc'); # EUC変換 $i =~ s/\,/\./g; $COM{'rf'} = "$i"; } #--- %7E を チルダに変換 $COM{'rf'} =~ s/\/\%7e/\/\~/ig; #--- リンク元情報によるログ取得拒否 foreach (@INI_deny_referrer_nolog){ if($_ ne '' && $COM{'rf'} =~ /\Q$_\E/){ &put_data(0); exit; } } #--- ブックマーク判定用リンク元変換処理 $COM{'rf'} = 'B' if($COM{'rf'} eq 'b'); if($COM{'md'} =~ /^(s|j)$/ && $COM{'rf'} eq ''){ $COM{'rf'} = 'b'; } $COM{'rf'} = 'Nj' if($COM{'rf'} eq 'nj'); if($COM{'md'} eq 'nj'){ $COM{'rf'} = 'nj'; } $COM{'rf'} = 'I' if($COM{'rf'} eq 'i'); if($COM{'md'} eq 'i'){ $COM{'rf'} = 'i'; } #--- リンク元情報の取得拒否(ログは取得します) foreach (@INI_deny_referrer){ if($_ ne '' && $COM{'rf'} =~ /\Q$_\E/){ $COM{'rf'} = ''; last; } } #--- リンク元情報によるカウントアップ拒否(ログは取得します) foreach (@INI_deny_referrer_nocount){ if($_ ne '' && $COM{'rf'} =~ /\Q$_\E/){ $COM{'cnt'} = 'no'; last; } } #------------------------------------------------------------------------------- #---------------------------------------------------------- クッキーによる処理▼ if($COM{'md'} ne 's'){ &require($INI_require_path{'cookie'}); #--- 管理者のクッキーがあるならログを取得しない %ADMIN_COOKIE = &get_cookie("$INI{'admin_cookie_name'}$INI{'cookie_path'}"); if($ADMIN_COOKIE{'who'} eq 'admin'){ &put_data(0); exit; } #--- クッキーを取得 %COOKIE = &get_cookie("$INI{'cookie_name'}$INI{'cookie_path'}"); if($COOKIE{'cnt'} eq ''){ $COOKIE{'cnt'} = 0; } #--- 滞在時間の取得 $INI{'stay_time'} = $INI{'time'} - $COOKIE{'t'}; #--- 同一ページへの連続アクセスを弾く if($INI{'wwcheck_by_cookie'} == 1 && $COOKIE{'pg'} eq $COM{'pg'} && $INI{'stay_time'} <= $INI{'stay_time_border'}){ &put_data(0); exit; }else{ #--- 訪問回数を増やす $COOKIE{'cnt'}++; } #--- 滞在時間と認められなければクリア if($INI{'stay_time'} >= $INI{'stay_time_border'}){ $INI{'stay_time'} = ''; } } #------------------------------------------------------------------------------- #------------------------------------------------------ リモートホスト名の取得▼ $INI{'remote_host'} = $ENV{'REMOTE_HOST'}; $INI{'remote_addr'} = $ENV{'REMOTE_ADDR'}; if($INI{'remote_host'} eq '' || $INI{'remote_host'} eq $INI{'remote_addr'}){ $INI{'remote_host'} = gethostbyaddr(pack('C4',split(/\./,$INI{'remote_addr'})),2); if($INI{'remote_host'} eq ''){ $INI{'remote_host'} = $INI{'remote_addr'}; } } #--- ホスト名によるログ取得拒否 foreach (@INI_deny_host){ if($_ ne '' && ($INI{'remote_host'} =~ /\Q$_\E/ || $INI{'remote_addr'} =~ /\Q$_\E/)){ &put_data(0); exit; } } #------------------------------------------------------------------------------- #------------------------------------------------------------ ブラウザ名の取得▼ $i = $ENV{'HTTP_USER_AGENT'}; if($i ne ''){ &$jcnv(\$i,'euc'); $i =~ s/\,/\./g; } $INI{'hua'} = $i; #------------------------------------------------------------------------------- #---------------------------------- ホスト名とブラウザ名によるログ取得拒否処理▼ foreach (keys %INI_deny_host_agent){ if($_ ne '' && $INI_deny_host_agent{$_} ne '' && $INI{'hua'} =~ /\Q$INI_deny_host_agent{$_}\E/ && ($INI{'remote_host'} =~ /\Q$_\E/ || $INI{'remote_addr'} =~ /\Q$_\E/)){ &put_data(0); exit; } } #------------------------------------------------------------------------------- #-------------------------------------------------------- プロクシチェック処理▼ &require($INI_require_path{'proxy'}); ($INI{'proxy'},$INI{'true_host'}) = &proxy($INI{'hua'},$INI{'remote_host'}); #--- プロクシ経由ならログ取得拒否 if($INI{'proxy_check'} > 0){ if(($INI{'proxy_check'} == 3 && $INI{'proxy'} =~ /e|ha/) || ($INI{'proxy_check'} == 2 && $INI{'proxy'} =~ /eh|ea|ha/) || ($INI{'proxy_check'} == 1 && $INI{'proxy'} eq 'eha')){ &put_data(0); exit; } } #------------------------------------------------------------------------------- #---------------------------------------------------------------------- ID作成▼ if($INI{'use_remote_user_id'} == 1){ if($ENV{'REMOTE_USER'} ne ''){ $COOKIE{'id'} = "$INI{'remote_user_chara'}$ENV{'REMOTE_USER'}"; } } if($COOKIE{'id'} eq ''){ if($INI{'mobile_id'} == 1){ &require($INI_require_path{'jua'}); %jua = &jua($ENV{'HTTP_USER_AGENT'}); $COOKIE{'id'} = "$INI{'mobile_id_chara'}$jua{'id'}"; }else{ &require($INI_require_path{'id'}); $COOKIE{'id'} = &make_id($INI{'remote_host'},$INI{'remote_addr'},$INI{'hua'}); } } #--- IDによるログ取得拒否 foreach (@INI_deny_id){ if($_ ne '' && $COOKIE{'id'} =~ /\Q$_\E/){ &put_data(0); exit; } } #------------------------------------------------------------------------------- #------------------------------------------ ログ記録による連続アクセスチェック▼ if($INI{'wwcheck'} > 0){ if(-e $INI{'wwcheck_log_file'}){ #--- ファイルロック &require($INI_require_path{'filelock'}); 1 while (not defined($INI{'lfh'} = &filelock($INI{'filelock_dir'},$INI{'wwcheck_lock_file'},$INI{'lock_timeout'},$INI{'lock_retry'}))); #--- 連続アクセスチェック用ログファイルを開く open(RAX,"<$INI{'wwcheck_log_file'}") || &error("連続アクセスチェック用のログファイルが開けません。"); for($INI{'i'} = 0; $INI{'i'} < $INI{'wwcheck'}; $INI{'i'}++){ $INI{'j'} = ; push(@wwcheck_log,$INI{'j'}); $INI{'j'} = ''; } close(RAX); #--- 連続アクセスであれば弾く foreach (@wwcheck_log){ @wwcheck_log_line = split(/\,/,$_); chomp($wwcheck_log_line[2]); $INI{'i'} = $INI{'time'} - $wwcheck_log_line[0]; if($INI{'i'} < $INI{'wwcheck_no'} && $wwcheck_log_line[1] eq $COM{'pg'} && $wwcheck_log_line[2] eq $COOKIE{'id'}){ &unlock($INI{'lfh'}); &put_data(0); exit; } undef(@wwcheck_log_line); } #--- ログの数を調整 pop @wwcheck_log; unshift(@wwcheck_log,"$INI{'time'}\,$COM{'pg'}\,$COOKIE{'id'}\n"); #--- 連続アクセスチェック用ログの更新 open(WAX,">$INI{'wwcheck_log_file'}") || &error("連続アクセスチェック用のログファイルが開けません。"); print WAX @wwcheck_log; close(WAX); &unlock($INI{'lfh'});# ロック解除 }else{ #--- 連続アクセスチェックログファイルが存在しない &error('連続アクセスチェック用のログファイルが見つかりません。','設置構成をご確認ください。'); } } # close if($INI{'wwcheck'} > 0) #------------------------------------------------------------------------------- #---------------------------------------------------- 各項目ごとの情報取得拒否▼ if($INI_deny_fact{'all'} != 0){ if($INI_deny_fact{'id'} == 1){ $COOKIE{'id'} = ''; } if($INI_deny_fact{'pf'} == 1){ $COM{'pf'} = ''; } if($INI_deny_fact{'remote_host'} == 1){ $INI{'remote_host'} = ''; } if($INI_deny_fact{'remote_addr'} == 1){ $INI{'remote_addr'} = ''; } if($INI_deny_fact{'proxy'} == 1){ $INI{'proxy'} = ''; } if($INI_deny_fact{'true_host'} == 1){ $INI{'true_host'} = ''; } if($INI_deny_fact{'hua'} == 1){ $INI{'hua'} = ''; } if($INI_deny_fact{'lng'} == 1){ $COM{'lng'} = ''; } if($INI_deny_fact{'swh'} == 1){ $COM{'swh'} = ''; } if($INI_deny_fact{'cd'} == 1){ $COM{'cd'} = ''; } if($INI_deny_fact{'pd'} == 1){ $COM{'pd'} = ''; } if($INI_deny_fact{'pg'} == 1){ $COM{'pg'} = ''; } if($INI_deny_fact{'pg2'} == 1){ $COOKIE{'pg'} = ''; } if($INI_deny_fact{'stay_time'} == 1){ $INI{'stay_time'} = ''; } if($INI_deny_fact{'rf'} == 1){ $COM{'rf'} = ''; } if($INI_deny_fact{'cnt'} == 1){ $COOKIE{'cnt'} = ''; } } #------------------------------------------------------------------------------- #-------------------------------------------------- ログファイルの書き込み処理▼ #--- 時刻調整 &require($INI_require_path{'dtime'}); @tm = &dtime($INI{'time'}); #--- ログ記録に関するもろもろの設定 $INI{'log_file_path'} = "$INI{'log_files_dir_path'}$tm[5]$tm[4]$tm[3]_$INI{'add_log_str'}\.cgi"; $INI{'log_data'} = "$INI{'time'}\,$COOKIE{'id'}\,$COM{'pf'}\,$INI{'remote_host'}\,$INI{'remote_addr'}\,$INI{'proxy'}\,$INI{'true_host'}\,$INI{'hua'}\,$COM{'lng'}\,$COM{'swh'}\,$COM{'cd'}\,$COM{'pd'}\,$COM{'pg'}\,$COOKIE{'pg'}\,$INI{'stay_time'}\,$COOKIE{'cnt'}\,$COM{'rf'}\n"; #--- ファイルロック &require($INI_require_path{'filelock'}); 1 while (not defined($INI{'lfh'} = &filelock($INI{'filelock_dir'},$INI{'log_lock_file'},$INI{'lock_timeout'},$INI{'lock_retry'}))); #--- ログファイルの有無により処理分岐 if(-e $INI{'log_file_path'}){ #--- 既にログファイルがある場合 open(ADDLOG,">>$INI{'log_file_path'}") || &error('ログファイルの読み込みオープンに失敗しました。'); print ADDLOG $INI{'log_data'}; close(ADDLOG); eval(chmod oct($INI{'pm_rw'}),$INI{'log_file_path'}); #--- 本日カウント更新 if($COM{'cnt'} ne 'no'){ open(RCNT,"<$INI{'today_count_file_path'}") || &error('カウンタファイルが開けません。'); $INI{'count_today'} = ; close(RCNT); $INI{'count_today'}++; open(WCNT,">$INI{'today_count_file_path'}") || &error('カウンタファイルの書き込みに失敗しました。'); print WCNT "$INI{'count_today'}"; close(WCNT); eval(chmod oct($INI{'pm_rw'}),$INI{'today_count_file_path'}); #--- ページごとのカウント処理 if($INI{'page_count_dir'} ne ''){ if(-e "$INI{'page_count_dir'}$COM{'pg'}_today.cgi"){ open(RCNT,"<$INI{'page_count_dir'}$COM{'pg'}_today.cgi") || &error('カウンタファイルが開けません。'); $INI{'count_today'} = ; close(RCNT); $INI{'count_today'}++; }else{ $INI{'count_today'} = 1; } open(WCNT,">$INI{'page_count_dir'}$COM{'pg'}_today.cgi") || &error('カウンタファイルの書き込みに失敗しました。'); print WCNT "$INI{'count_today'}"; close(WCNT); eval(chmod oct($INI{'pm_rw'}),"$INI{'page_count_dir'}$COM{'pg'}_today.cgi"); } } }else{ #--- 新規にログファイルを作成する場合 open(NEWLOG,">$INI{'log_file_path'}") || &error('ログファイルの新規作成に失敗しました。'); print NEWLOG $INI{'log_data'}; close(NEWLOG); eval(chmod oct($INI{'pm_rw'}),$INI{'log_file_path'}); #--- 昨日・本日カウント更新 if(-e "$INI{'today_count_file_path'}"){ open(RCNT,"<$INI{'today_count_file_path'}") || &error('カウンタファイルが開けません。'); $INI{'count_today'} = ; close(RCNT); }else{ $INI{'count_today'} = 0; } open(WCNT,">$INI{'yesterday_count_file_path'}") || &error('カウンタファイルの書き込みに失敗しました。'); print WCNT "$INI{'count_today'}"; close(WCNT); open(WCNT,">$INI{'today_count_file_path'}") || &error('カウンタファイルの書き込みに失敗しました。'); if($COM{'cnt'} ne 'no'){ print WCNT "1"; }else{ print WCNT "0"; } close(WCNT); eval(chmod oct($INI{'pm_rw'}),$INI{'today_count_file_path'}); eval(chmod oct($INI{'pm_rw'}),$INI{'yesterday_count_file_path'}); #--- ページごとのカウント処理 if($INI{'page_count_dir'} ne ''){ opendir(DIR,"$INI{'page_count_dir'}") || &error('ページごとのカウンタディレクトリが開けません。'); foreach (readdir(DIR)){ if($_ =~ /(.+)\_today\.cgi$/){ $INI{'pgcnt'} = "$1"; open(RCNT,"<$INI{'page_count_dir'}$INI{'pgcnt'}_today.cgi") || &error('カウンタファイルが開けません。'); $INI{'count_today'} = ; close(RCNT); open(WCNT,">$INI{'page_count_dir'}$INI{'pgcnt'}_yesterday.cgi") || &error('カウンタファイルの書き込みに失敗しました。'); print WCNT "$INI{'count_today'}"; close(WCNT); open(WCNT,">$INI{'page_count_dir'}$INI{'pgcnt'}_today.cgi") || &error('カウンタファイルの書き込みに失敗しました。'); if($COM{'cnt'} ne 'no' && $INI{'pgcnt'} eq $COM{'pg'}){ print WCNT "1"; }else{ print WCNT "0"; } close(WCNT); eval(chmod oct($INI{'pm_rw'}),"$INI{'page_count_dir'}$INI{'pgcnt'}_today.cgi"); eval(chmod oct($INI{'pm_rw'}),"$INI{'page_count_dir'}$INI{'pgcnt'}_yesterday.cgi"); } } closedir(DIR); } #--- ログの数を調整する処理 if($INI{'save_log_num'} > 0){ opendir(DIR,"$INI{'log_files_dir_path'}") || &error('ログ保存ディレクトリが開けません。'); foreach (readdir(DIR)){ if($_ =~ /^(\d\d\d\d\d\d\d\d)_$INI{'add_log_str'}\.cgi$/){ push(@save_logs,$_); } } closedir(DIR); @save_logs = sort(@save_logs); while($#save_logs >= $INI{'save_log_num'}){ $del_log_file = shift(@save_logs); unlink("$INI{'log_files_dir_path'}$del_log_file") || &error('ログファイルの削除に失敗しました。'); } } } &unlock($INI{'lfh'});# ロック解除 #------------------------------------------------------------------------------- #---------------------------------------------------------------- カウンタ処理▼ #--- ファイルロック 1 while (not defined($INI{'lfh'} = &filelock($INI{'filelock_dir'},$INI{'count_lock_file'},$INI{'lock_timeout'},$INI{'lock_retry'}))); #--- トータルカウンタ if($COM{'cnt'} ne 'no'){ if(-e $INI{'count_file_path'}){ #--- カウンタファイルがある場合 #--- カウント数読み込み open(RCNT,"<$INI{'count_file_path'}") || &error('カウンタファイルが開けません。'); $INI{'count_total'} = ; $INI{'count_since'} = ; close(RCNT); chomp($INI{'count_total'}); $INI{'count_total'}++; #--- カウント数書き込み open(WCNT,">$INI{'count_file_path'}") || &error('カウンタファイルの書き込みに失敗しました。'); print WCNT "$INI{'count_total'}\n$INI{'count_since'}"; close(WCNT); }elsif(!-e $INI{'count_file_path'}){ #--- カウンタファイルがない場合(カウンタリセット) #--- カウント数書き込み if($COM{'cnt'} ne 'no'){ $INI{'count_total'} = 1; }else{ $INI{'count_total'} = 0; } open(WCNT,">$INI{'count_file_path'}") || &error('カウンタファイルの新規作成に失敗しました。'); print WCNT "$INI{'count_total'}\n$tm[5]/$tm[4]/$tm[3] $tm[2]:$tm[1]:$tm[0]"; close(WCNT); } eval(chmod oct($INI{'pm_rw'}),$INI{'count_file_path'}); #--- ページごとのトータルカウンタ if($INI{'page_count_dir'} ne ''){ if(-e "$INI{'page_count_dir'}$COM{'pg'}_total.cgi"){ #--- カウンタファイルがある場合 #--- カウント数読み込み open(RCNT,"<$INI{'page_count_dir'}$COM{'pg'}_total.cgi") || &error('カウンタファイルが開けません。'); $INI{'pg_count_total'} = ; $INI{'pg_count_since'} = ; close(RCNT); chomp($INI{'pg_count_total'}); $INI{'pg_count_total'}++; #--- カウント数書き込み open(WCNT,">$INI{'page_count_dir'}$COM{'pg'}_total.cgi") || &error('カウンタファイルの書き込みに失敗しました。'); print WCNT "$INI{'pg_count_total'}\n$INI{'pg_count_since'}"; close(WCNT); }else{ #--- カウンタファイルがない場合(カウンタリセット) #--- カウント数書き込み open(WCNT,">$INI{'page_count_dir'}$COM{'pg'}_total.cgi") || &error('カウンタファイルの新規作成に失敗しました。'); print WCNT "1\n$tm[5]/$tm[4]/$tm[3] $tm[2]:$tm[1]:$tm[0]"; close(WCNT); } eval(chmod oct($INI{'pm_rw'}),"$INI{'page_count_dir'}$COM{'pg'}_total.cgi"); } }elsif(-e $INI{'count_file_path'}){ #--- カウンタファイルがある場合 #--- カウント数読み込み open(RCNT,"<$INI{'count_file_path'}") || &error('カウンタファイルが開けません。'); $INI{'count_total'} = ; $INI{'count_since'} = ; close(RCNT); chomp($INI{'count_total'}); } &unlock($INI{'lfh'});# ロック解除 #------------------------------------------------------------------------------- #------------------------------------------------------ チェックメール送信処理▼ if($INI{'cmd_sendmail'} ne ''){ # キーワードを含むログをメール foreach (@INI_mail_check_words){ if($_ ne '' && ($INI{'log_data'} =~ /\Q$_\E/ || $_ eq 'all_log_mail')){ if($_ eq 'all_log_mail'){ $INI{'mail_msg'} = <<"_TXT_"; ■全てのログをメールする設定です。$tm[5]/$tm[4]/$tm[3] $tm[2]:$tm[1]:$tm[0] $INI{'log_data'} _TXT_ }else{ $INI{'mail_msg'} = <<"_TXT_"; ■「$_」を含むログが記録されました。\n$tm[5]/$tm[4]/$tm[3] $tm[2]:$tm[1]:$tm[0] $INI{'log_data'} _TXT_ } &require($INI_require_path{'sendmail'}); &sendmail($INI{'mail_master'},$INI{'mail_master'},$INI{'mail_title'},$INI{'mail_msg'}); } } #--- キリ番ゲッターをメール if($INI{'kiri_mail'} == 1 && $INI{'count_total'} =~ /^0+$|^1+$|^2+$|^3+$|^4+$|^5+$|^6+$|^7+$|^8+$|^9+$/){ $INI{'mail_msg'} = <<"_TXT_"; ■キリ番「$INI{'count_total'}」がカウントされました。$tm[5]/$tm[4]/$tm[3] $tm[2]:$tm[1]:$tm[0] $INI{'log_data'} _TXT_ &require($INI_require_path{'sendmail'}); &sendmail($INI{'mail_master'},$INI{'mail_master'},$INI{'mail_title'},$INI{'mail_msg'}); } } #--- 出力処理 &put_data(1); exit; #--- dsw.cgi 処理終了 #------------------------------------------------------------------------------- #---------------------------------------------------------------- データの出力▼ sub put_data { if($_[0] == 0 && $COM{'p'} ne 'n' && $COM{'p'} ne 'm'){ if($INI{'count_total'} !~ /^(\d+)$/){ #--- 総PVとカウント開始日の取得 if(-e $INI{'count_file_path'}){ #--- カウンタファイルがある場合 open(RCNT,"<$INI{'count_file_path'}") || &error('カウンタファイルが開けません。'); $INI{'count_total'} = ; $INI{'count_since'} = ; close(RCNT); chomp($INI{'count_total'}); chomp($INI{'count_since'}); }else{ #--- カウンタファイルがない場合 $INI{'count_total'} = "0000"; $INI{'count_since'} = "---"; } } } if($COM{'md'} ne 's'){ # IMG + JavaScript or IMG if($INI{'wwcheck_by_cookie'} == 1){ #--- クッキー書き込み &require($INI_require_path{'cookie'}); &put_cookie("$INI{'cookie_name'}",$INI{'cookie_on_days'},"t:$INI{'time'}\,pg:$COM{'pg'}\,id:$COOKIE{'id'}\,cnt:$COOKIE{'cnt'}",$INI{'cookie_path'}); } if($COM{'p'} eq 'n'){ #--- 見た目何もナシの画像を出力 print "Content-type: image/gif\n\n"; foreach (@INI_image){ $INI{'i'} = pack('C*',hex($_)); print $INI{'i'}; } }elsif($COM{'p'} eq 'm'){ print "Content-type: image/gif\n\n"; #--- d ロゴの出力 if($INI{'logo_file_path'} ne ''){ if(-e $INI{'logo_file_path'}){ open(RIMG,"<$INI{'logo_file_path'}") || die('ロゴ画像ファイルが開けません'); while(){ print $_; } close(RIMG); } }else{ foreach (@INI_image2){ $INI{'i'} = pack('C*',hex($_)); print $INI{'i'}; } } }elsif($COM{'p'} eq 'g' || $COM{'p'} eq 'p' || $COM{'p'} eq '' || $COM{'p'} eq 't'){ if($COM{'p'} eq 'p'){ $imext = 'png'; }else{ $imext = 'gif'; } #--- カウンタ画像の出力 if($INI{'cnt_total_keta'} > 0){ $COM{'k'} = $INI{'cnt_total_keta'}; } $INI{'count_total'} = "0" x ($COM{'k'} - (length("$INI{'count_total'}"))) . "$INI{'count_total'}"; @INI_put_image = split(//,$INI{'count_total'}); $INI{'i'} = 0; foreach (@INI_put_image){ $INI_put_image[$INI{'i'}] = "$INI{'cnt_images_path'}$_\.$imext"; $INI{'i'}++; } # 連結画像を出力 print "Content-type: image/$imext\n"; print "Pragma: no-cache\n"; print "Cache-Control: no-cache\n"; print "Expires: Thu, 01 Dec 1994 16:00:00 GMT\n\n"; if($COM{'p'} eq 'p'){ use lib 'lib'; &require($INI_require_path{'pngren'}); binmode(STDOUT); $i = &pngren::PngRen(\@INI_put_image, $pngren::ALLAUTO24); die $i; }else{ &require($INI_require_path{'gifcat'}); binmode(STDOUT); print &gifcat'gifcat(@INI_put_image); } } }else{ print "Content-type: text/html;\n"; print "Pragma: no-cache\n"; print "Cache-Control: no-cache\n"; print "Expires: Thu, 01 Dec 1994 16:00:00 GMT\n\n"; #--- SSI if($COM{'p'} eq 't'){ #--- SSI でテキストカウンタ出力 print $INI{'count_total'}; }elsif($COM{'p'} eq 'g' || $COM{'p'} eq ''){ #--- SSI でカウンタ画像の出力 if($INI{'cnt_total_keta'} > 0){ $COM{'k'} = $INI{'cnt_total_keta'}; } $INI{'count_total'} = "0" x ($COM{'k'} - (length("$INI{'count_total'}"))) . "$INI{'count_total'}"; @INI_put_image = split(//,$INI{'count_total'}); foreach (@INI_put_image){ print "\"since"; } }elsif($COM{'p'} eq 'm'){ #--- SSI でカウンタ出力なし if($COM{'char'} eq 'sjis' || $COM{'char'} eq 'jis'){ $i = $INI{'ssi_put_line'}; &$jcnv(\$i,$COM{'char'}); }else{ $i = $INI{'ssi_put_line'}; } print "$i"; }elsif($COM{'p'} eq 'n'){ #--- SSI で出力なし print " "; } } # close if($COM{'md'} ne 's') return; } #------------------------------------------------------------------------------- #------------------------------------------------------------------ エラー処理▼ sub error { &require($INI_require_path{'filelock'}); &unlock($INI{'lfh'}); &put_data(0); die "$_[0] : $!"; exit; } #------------------------------------------------------------------------------- # Copyright (c) 2001-CurrentYear bayashi.net. All rights reserved. # http://tech.bayashi.net/