#!/usr/bin/perl # ###################################################################### ### ### ### CGIカウンター TcounT Ver.5.03 ### [2/2] 管理 (tcpadm.cgi) ### (c) 1996-2004 Takahiro Nishida ### http://www.mytools.net/ ### ### ###################################################################### # ### 変数設定部 (詳細は上記ページをご覧下さい) ###################### # 管理パスワード $password = "Tcount5"; # 管理者メールアドレス $admin_email = "your\@email.address"; # データファイルの格納位置 $basedir = "."; # 「戻る」を押したときに移動するURL $backurl = "http://your.homepage/"; ### 変数設定部 (ここまで)########################################### # ログ閲覧にパスワードを要するか(1→必要、0→不必要) $NEED_PASSWORD_FOR_LOGVIEW = 0; # 「最近×日間の集計」を何日分にする $RECENT_DAYS_COUNT = 7; # カウント開始直後の×日を統計対象から除外する $AVG_IGNORE_DAYS_COUNT = 1; $lockfile = "$basedir/lockdir/tc.lock"; $allfile = "$basedir/tcdall.txt"; $ystfile = "$basedir/tcdyst.txt"; $hstfile = "$basedir/tcdhst.txt"; $logfile = "$basedir/tcdlog.txt"; $bakfile = "$basedir/tcdbak.txt"; $verno = "5.03"; print "Content-type: text/html; Charset=shift_jis\n\n"; &main; sub main{ &lock; &init_variables; &open_datafile; &check_input; &exec_action; &update_files; &show_html; &unlock; } ########## 変数の初期化 sub init_variables{ $noact = "何も変更されませんでした。"; $actmsg = ""; } ########## データファイルのオープン sub open_datafile{ &openfile($allfile, *tdys); &openfile($ystfile, *ysts); ### 日付データ取得 $g_date_rec = shift(@tdys); ### 取得できなかったらrecoverで一旦初期化 ($g_date_rec) || &error(391, "先に こちら をクリックしてデータファイルの初期化を行い、再度 tcpadm.cgi にアクセスしてください。"); ### 今日データのハッシュ化 foreach(@tdys){ (/^\w+\t/) || next; ($b_ccode) = split("\t"); ($b_ccode =~ /^\w+/) || next; $CTDY{$b_ccode} = $_; ### ソート順取得 push(@g_codesort, $b_ccode); } ### 昨日データのハッシュ化 foreach(@ysts){ ($b_ccode) = split("\t"); ($CYST{$b_ccode} = $_); } ### 今日のカウント数 foreach (@g_codesort){ ($b_ccode, $b_ca, $b_cah) = split("\t", $CTDY{$_}); ($b_ccode, $b_cy, $b_cyh, $b_cu, $b_cuh) = split("\t", $CYST{$_}); ### 今日=総合−昨日迄 $CCT{$_} = $b_ca - $b_cu; $CCTH{$_} = $b_cah - $b_cuh; } } ########## 入力内容のチェック sub check_input{ local($buffer, $vn, $pair, @pairs); if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); } else { $buffer = $ENV{'QUERY_STRING'}; } @pairs = split(/&/, $buffer); foreach $pair (@pairs) { ($vn, $value) = split(/=/, $pair); $F{$vn} .= $value; } $m_pwd = $F{'pwd'}; $m_mode = $F{'mode'}; $m_act = $F{'act'}; $m_ccode = $F{'ccode'}; (!$m_ccode) || ($m_ccode =~ /^\w+$/) || &error(300, "カウンターのコード名が不正です:$m_ccode"); } ########## 作業の実行 sub exec_action{ ### パスワードチェック if ($m_pwd ne $password){ $actmsg = ($m_pwd) ? "パスワードが間違っています。$noact" : "作業を選択し、パスワードを入力して「作業実行」を押してください。"; ### logモードかつPassword不要「でない」場合はモードをtopに戻す ($m_mode eq 'log') && ($NEED_PASSWORD_FOR_LOGVIEW == 0) || ($m_mode = "top"); } ### modeごとの処理へ if($m_mode eq 'cnt'){ $actmsg = "カウンタ修正用フォームを表\示しています。"; if($m_act eq 'new' || $m_act eq 'fix'){ &fix_data; } } elsif($m_mode eq 'log'){ $actmsg = "カウンターログを表\示しています。"; } elsif($m_mode eq 'clm'){ &clear_actlog; $actmsg = "カウンター動作ログをクリアしました。"; } } ########## データの修正 sub fix_data{ local($m_ccode, $m_cdel); local($m_ca, $m_cah, $m_cy, $m_cyh, $m_cu, $m_cuh); local($newtdys, $newysts); ### 入力の受け取り $m_ccode = $F{'ccode'}; $m_ca = $F{'ca'}; $m_cu = $F{'cu'}; $m_cy = $F{'cy'}; $m_cah = $F{'cah'}; $m_cuh = $F{'cuh'}; $m_cyh = $F{'cyh'}; $m_cdel = ($F{'cdel'}) ? 1 : 0; ### 入力のチェック ($m_ccode =~ /^\w+$/) || &error(300, "カウンターコードが不正です:使用できる文字は [A-Za-z0-9] です"); ($m_ca =~ /^\d+$/) || &error(301, "入力が不正です:「述べアクセス数−現在」は半角数字で記入"); ($m_cu =~ /^\d+$/) || &error(302, "入力が不正です:「述べアクセス数−昨日まで」は半角数字で記入"); ($m_cy =~ /^\d+$/) || &error(303, "入力が不正です:「述べアクセス数−昨日」は半角数字で記入"); ($m_cah =~ /^\d+$/) || &error(304, "入力が不正です:「ホストアクセス数−現在」は半角数字で記入"); ($m_cuh =~ /^\d+$/) || &error(305, "入力が不正です:「ホストアクセス数−昨日まで」は半角数字で記入"); ($m_cyh =~ /^\d+$/) || &error(306, "入力が不正です:「ホストアクセス数−昨日」は半角数字で記入"); ### 社会的エラー ($m_ca >= $m_cu) || &error(307, "数値が不正です:延べアクセス数−現在($m_ca)が昨日まで($m_cu)より小さい"); ($m_cu >= $m_cy) || &error(309, "数値が不正です:延べアクセス数−昨日まで($m_cu)が昨日($m_cy)より小さい"); ($m_cah >= $m_cuh) || &error(308, "数値が不正です:ホストアクセス数−現在($m_cah)が昨日まで($m_cuh)より小さい"); ($m_cuh >= $m_cyh) || &error(310, "数値が不正です:ホストアクセス数−昨日まで($m_cuh)が昨日($m_cyh)より小さい"); ### 新規 if($m_act eq 'new') { ($m_ccode) || &error(311, "カウンターコードが入力されていません。"); ($CTDY{$m_ccode}) && &error(312, "指定されたカウンタコードは既に使用されています:$m_ccode"); $actmsg = "カウンタ $m_ccode を新規作成しました。"; push(@g_codesort, $m_ccode); $F{'cread'} = 0; } ### 修正 else{ ($CTDY{$m_ccode}) || &error(313, "指定されたカウンタコードは存在しません:$m_ccode"); $actmsg = "カウンタ $m_ccode を修正しました。"; $F{'cread'} = 1; ### 削除 if($m_cdel) { foreach(0..$#g_codesort) { ($g_codesort[$_] eq $m_ccode) && splice(@g_codesort, $_, 1); } $actmsg = "カウンタ $m_ccode を削除しました。"; $F{'cread'} = 0; } } ### ハッシュ作成 or 上書き $CTDY{$m_ccode} = "$m_ccode\t$m_ca\t$m_cah\t\n"; $CYST{$m_ccode} = "$m_ccode\t$m_cy\t$m_cyh\t$m_cu\t$m_cuh\t\n"; ### 今日=総合−昨日迄 $CCT{$m_ccode} = $m_ca - $m_cu; $CCTH{$m_ccode} = $m_cah - $m_cuh; ### データ再編成 push(@newtdys, $g_date_rec); # 日付 foreach(@g_codesort) { ### 行挿入 push(@newtdys, $CTDY{$_}); push(@newysts, $CYST{$_}); } @tdys = @newtdys; @ysts = @newysts; ### 更新フラグ $upf_tdys = 1; $upf_ysts = 1; } ########## カウンター動作ログのクリア sub clear_actlog{ local @tmps = (); &updatefile($logfile, *tmps); } ########## ファイルの更新 sub update_files{ ($upf_tdys) && &updatefile($allfile, *tdys); ($upf_ysts) && &updatefile($ystfile, *ysts); } ########## 表示 sub show_html{ local($hbuf_copyright, $hbuf_table, $hbuf_form); ($F{'back'}) && ($m_mode = "top"); if($m_mode eq 'cnt'){ $hbuf_table = &html_table; $hbuf_form = &html_form; } elsif($m_mode eq 'log'){ $hbuf_table = &html_log; } else{ $hbuf_form = &html_top; } $hbuf_copyright = ©right; print < T-Count 5 - 管理用ページ [戻る] [管理トップ]

T-Count 5 管理用ページ


作業状況: $actmsg
$hbuf_form $hbuf_table
$hbuf_copyright
EOP } ########## トップ画面 sub html_top{ local($hbuf_logview); ($NEED_PASSWORD_FOR_LOGVIEW == 0) && ($hbuf_logview = "※パスワード不要※"); "
パスワード
カウンタログ、動作ログ閲覧  $hbuf_logview
カウンタ新規作成、修正、削除
動作ログのクリア
"; } ########## 修正用フォーム sub html_form{ local($b_ccode, $b_ca, $b_cah); local($b_ccode, $b_cy, $b_cyh, $b_cu, $b_cuh); ### プルダウン foreach(@g_codesort) { ($b_selected) = ($_ eq $m_ccode) ? "SELECTED" : ""; $hbuf_options .= "