• 締切済み

IP/ホスト連続投稿チェック機能が上手く行かない。

なんでだろ?? ###+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ## SUB >>> ホスト取得処理 ###+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ sub get_HostAgent { $Host = $ENV{'REMOTE_HOST'}; $Addr = $ENV{'REMOTE_ADDR'}; if ($Host eq '') { $Host = $Addr; } if ($Host eq $Addr) { $Host = gethostbyaddr(pack('C4',split(/\./,$Host)),2) || $Addr; } $H_A = "$Host"; } ホスト取得ルーチンにある変数で、 いろんな掲示板の中のP/ホスト連続投稿チェック機能だけ抜き出して、 もう何十個も試したけれど、上手くいきません。 カスタマイズしてる会員掲示板に、 IP/ホスト連続投稿チェック機能を付けたいのですが上手くいきません。 二重投稿チェックはあるのですが、、 ↓↓↓ #--二重投稿チェック--# if ($r1 eq "$name" && $r4 eq "$street<>$title" && $r5 eq "$comment") { &lock2; &error("二重投稿は禁止です"); } より極めるために、以下を利用したいのです。。 ↓↓↓ #--IP/ホスト連続投稿チェック--# if ($Addr = $ENV{'REMOTE_ADDR'} && $^T - $time < 120) { &lock2; &error("連続投稿はできません。<BR>時間をおいてから書き込みして下さい");} 宜しくお願い致します。 どこがおかしいのかサッパリです。 なんとか機能を追加できるようにお願いしますろ

みんなの回答

  • calltella
  • ベストアンサー率49% (317/635)
回答No.1

時間指定で連続投稿チェックを行なう場合は指定された時間内(120秒)に 投稿されたIPを読み込んでくる必要があります。 投稿されたIP→$addr 投稿された時間→$time(UNIX時間) 両方に適切な変数が入っていれば機能しますので&lock2の前辺りで 変数を出力して確認してみて下さい。

master999
質問者

補足

レス有難うございます。 しかし、上手く機能しません。なにかが抜けているんでしょうか・・? ユーザー出力処理のルーチンの中に以下のような列があって、$H_Akeyでホストが表示されるようになっているらしいです。 $H_Akeyにしても、$Hostにしても、$Addrにしても、&get_HostAgentにしても機能してくれず、連続で書き込めてしまいます。 #--ホストを表示--# if ($H_Akey) { print "<FONT color=\"$hostcolor\"><SMALL>$H_A</SMALL></FONT>\n"; } また、初期設定のすぐ下に、 &form_decord; &get_HostAgent; unless ($p_log) { $p_log = 10; } if ($in{'action'} eq 'manual') { &manual; } elsif ($in{'action'} eq 'memberform') { &in_data; } elsif ($in{'action'} eq 'member_view') { &members_view; } elsif ($in{'action'} eq 'regist') { &regist; } elsif ($in{'action'} eq 'mailform') { &mailform; } elsif ($in{'action'} eq 'sendmail') { &sendmail; } elsif ($in{'action'} eq 'search') { &word_search; } elsif ($in{'action'} eq 'usr_kill') { &kill_action; } elsif ($in{'action'} eq 'management') { &management_view; } elsif ($in{'ccn'} eq 'on') { &ccn; } else { &manual; } というのがあり、&get_HostAgent;も関係しているのかな? 実際の登録処理の中にIP/ホストに関係するような列は出てきません。 禁止ワードチェックの上に以下を入れたのですが、機能してません #--二重投稿チェック--# if ($Addr = $ENV{'REMOTE_ADDR'} && $^T - $time < 120) { &error("連続投稿はできません。<BR>時間をおいてから書き込みして下さい");}。 以下は最後の方のホスト取得処理ルーチンです。 ###+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ## SUB >>> ホスト取得処理 ###+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ sub get_HostAgent { $Host = $ENV{'REMOTE_HOST'}; $Addr = $ENV{'REMOTE_ADDR'}; if ($Host eq '') { $Host = $Addr; } if ($Host eq $Addr) { $Host = gethostbyaddr(pack('C4',split(/\./,$Host)),2) || $Addr; } $H_A = "$Host"; } 時間取得は以下のようになっています。 #--ローカルタイムを取得--# ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(time); $year += 1900; $month = $mon + 1; @dayname = ('日','月','火','水','木','金','土'); $date = "$year年$month月$mday日(@dayname[$wday])"; $time = sprintf("%02d:%02d:%02d",$hour,$min,$sec); }

関連するQ&A