![]() |
カレッヂ |
質問者 柴崎
投稿日 6/18(月) 19:53:28
例えば、CGIプログラムが1000回実行されると翌日まで エラーメッセージを表示して アクセス出来ないようにするような方法は無いでしょうか? よろしくお願いします。 |
回答者 呑兵衛
[削除]
投稿日 6/21(木) 01:00:30
呑兵衛と言います。 こんなのどうですか。 午前0時までの24時間制限方法です。 24時間経過したファイルは自動的に削除されます。 何時に開始し、何時までの制限にするかは timeの+−で加減してください。 #!/usr/local/bin/perl の行に続けて書きます #---------------------------------------------------------------------------------------- $url = 'http://限度以降のhtml'; $giveup = 0; # 海外での設置は下の時差時間との合計が絶対値で24になるよう調整します # 時差が 9時間であれば -15*60*60になります ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(time -24*60*60); $del_file = sprintf("%04d%02d%02d", $year +1900, $mon +1, $mday); if (-e $del_file) { unlink($del_file); } # 海外での設置は timeのところを time +時差*60*60とします ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(time); $chk_file = sprintf("%04d%02d%02d", $year +1900, $mon +1, $mday); # この cgi が呼び出されたときの最初のファイルを生成します if (!-e $chk_file) { open(CHECK, "> $chk_file") || &error('error'); print CHECK "0\n"; close(CHECK); } # 呼び出されれば数値を1加え、1000回を超えればフラグを立てます open(CHECK, "$chk_file") || &error('error'); while (<CHECK>) { chomp; $bye_count = $_ +1; if ($bye_count >= 1000) { $giveup = 1; } } close(CHECK); # 読み込んだ数値が1000以内ならば新しい数値を記録します if ($count <= 1000) { open(CHECK, "> $chk_file") || &error('error'); print CHECK "$bye_count\n"; close(CHECK); } # フラグが立っていれば、限度以降のhtmlファイルに飛び、この行以降のスクリプトを中止します if ($giveup == 1) { print "Location: $url\n\n"; } #---------------------------------------------------------------------------------------- ここより以下に制限したいファイルのスクリプトを続けます。 注意 rescue さんのスクリプトで、イメージファイルが配列で処理されている(例: Newなど) cgi スクリプトは、2度同じスクリプトを実行します(2度カウントされる)ので注意してください。 &error で sub error を呼び出します。スクリプトに合わせて書き換えてください。 |
質問者 柴崎
[削除]
投稿日 6/21(木) 06:33:04
ありがとうございました。参考にさせて頂きます。 |
回答者 呑兵衛
[削除]
投稿日 6/21(木) 23:05:40
変更してください。 # 読み込んだ数値が1000以内ならば新しい数値を記録します if ($count <= 1000) { のところを if ($bye_count <= 1000) { に テストは すべての1000を5とか10にして・・・。 |
返信(回答)する
Web裏技 |