■■■■■■■■■■■■■■■■■■■■■CGI用■■■■■■■■■■■■■■■■■■■■■■
頻繁にアクセスする、戦闘cgiや、行動cgiでは、
必ず待機時間を設定してください。
(サーバーの極端な負荷と、フリーズを防ぐ為です)
待機時間が設定できないcgiには、
以下の待機時間を設定できるスクリプトを挿入して、
必ず、待機時間を設けるようにしてください。
#----------待機時間を設定できるスクリプト--ここから貼り付け---------------
#設置方法
#cgiファイルをテキストエディッタで開いて、
# #!/usr/bin/perl または #!/usr/local/bin/perl
#の下の行に、このスクリプトを貼り付けてください
#設置例
#├待機時間を設定する.cgi (パーミッション755 or 705)(このスクリプトを貼り付けるcgi)
#├time_log.dat (パーミッション666 or 606)(空のテキストファイル)
#(time_log.datという、空ののテキストファイルを作って同じディレクトリに置いてください)
#==========================================================
# ユーザ設定。
#==========================================================
# 記録用ファイル名
$record = "./time_log.dat";
# ユーザアクセス間隔調整用のファイルの最大記録数。50〜100を推奨
$log_max = 100;
# アクセス間隔制限秒数
$interval = 5;
#HTMLのBODYタグ
$html_body = '<body bgcolor="#ffffff" text="#000000" style="font-family: Times New Roman, Arial"link="#c0c0c0" vlink="#c0c0c0" alink="#f0f0f0">';
#==========================================================
# メインルーチン
#==========================================================
$addr = $ENV{'REMOTE_ADDR'}; #クライアントのIPアドレス。
#==========================================================
#ここからサブルーチン
#==========================================================
# アクセスのインターバル調整。
sub acc_control{
local(@ac_array,$line,$ac_value);
$acc_time = time; #秒数
open (INOUT, "+<$record") || &error_desu("$record アクセスファイルをオープン出来ませんでした。");
@ac_array = <INOUT>;
foreach $ac_value(@ac_array){ #
($log_time,$log_ip) = split(/,/,$ac_value);
if ($addr == $log_ip){ #IPが一致したら、
if ($acc_time < ($log_time + $interval)){
&error_desu("データ送信に$interval秒のインターバルを頂いております");
}
last; #foreachループを抜ける。
}
}
&save_desu;
}
#----------------------------------------------------------
# エラーメッセージ
sub error_desu{
print "Content-type: text/html\n\n";
print "<html><head><title>ERROR</title>\n</head>\n";
print "$html_body<center>\n";
print "<br><br>\n";
print "<h3>$_[0] </h3>\n";
print "</center></body></html>\n";
&save_desu;
exit;
}
#----------------------------------------------------------
# 保存
sub save_desu{
$line = "$acc_time,$addr\n";#時間とIPを記録
seek (INOUT,0,0); #ファイルポインタを先頭に。
unshift(@ac_array, $line); #先頭に挿入。
splice(@ac_array,$log_max); #記録件数の切り詰め。
print INOUT @ac_array; #書き出し。
$file_size = tell(INOUT); #サイズ取得。
truncate(INOUT, $file_size); #切り詰め。
close (INOUT) || die ;
}
#----------------------------------------------------------
&acc_control;
#-------------------------ここまで貼り付け---------------------------
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■PHP用■■■■■■■■■■■■■■■■■■■■■■
ネット検索などで、待機時間を設けられるPHPスクリプトを
探して拾ってきて 設置していただくようお願いいたします。
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■