cgiの投票回数制限設定について(Perl)
投票cgiを作成していますが、以下のPerlでは、同一IPから1日1回の投票しかできません。
同一IPからの投票を1日連続5回まで許可する仕組みにしたいと考えています。(6回目以降は単にカウントされないだけで警告等は出さない)
以下のPerlをどのように改造すれば良いか具体的にアドバイスを頂けると大変助かります。
かなり専門的な内容で恐縮ですが、困っておりますので、何卒よろしくお願い致します。
m(_ _)m
---------------------
# IPアドレスのチェック
sub IpCheck {
if (!-e $iplog) {
&TimeLog;
}
$last = (localtime((stat($iplog))[9] + $jisa))[3];
$today = (localtime($nowtime))[3];
if ($last != $today) {
unlink($iplog);
&TimeLog;
}
open(TLOG,"<$iplog");
@IP = <TLOG>;
close(TLOG);
$l = 0;
foreach (@IP) {
$_ =~ s/\r|\n//g;
if ($_ =~ /^$addr/) {
&NoCnt;
}
elsif ($l == $#IP) {
if (!open(RTIP,">>$iplog")) {
&Error(4);
}
print RTIP "$addr\n";
close(RTIP);
&CNTUP;
}
$l++;
}
}
sub TimeLog {
if (!open(TIME,">$iplog")) {
&Error(5);
}
print TIME "$addr\n";
close(TIME);
chmod(0666,$iplog);
&CNTUP;
}
#-------------------------------------------------
# クリックカウントアップ
sub CNTUP {
#ファイルロック開始
if( $lockkey ne '0' ){ &LOCK; }
if (!open(IN,"$linkdata_file")) { &ERROR( read_linkdata ); }
@BASE = <IN>;
close(IN);
foreach $data (@BASE) {
#データリスト読込
&LINKDATALIST;
if( $in{'targetno'} eq $CNTNUM ){
$COUNTERUP = $CLICK + 1;
$targeturl = $LINKURL;
$new_data = "$CNTNUM,$DATE_LINKDATA,$DATE_LMT,$DATE_ESY,$OPN,$NEWMARK,$CATEGORY,$LINKNAME,$HONORIFIC,$LINKURL,$COMMENT,$COUNTERUP,$IMAGE,\n";
}else{
$new_data = "$CNTNUM,$DATE_LINKDATA,$DATE_LMT,$DATE_ESY,$OPN,$NEWMARK,$CATEGORY,$LINKNAME,$HONORIFIC,$LINKURL,$COMMENT,$CLICK,$IMAGE,\n";
}
#ファイルの最初にデータを保存する
push( @TOTAL , $new_data );
}
#実際にファイルに書き込む
if (!open(NOTE,">$linkdata_file")) { &ERROR( read_linkdata ); }
print NOTE @TOTAL;
close(NOTE);
#ファイルロック解除
if( $lockkey ne '0' ){ &UNLOCK; }
#HTML出力
print "Location: $targeturl\n\n";
exit;
お礼
早速の回答ありがとうございます。 最初root権限でworkspaceを/usr/local/workspaceとして、後に一般ユーザー(maiko100)でworkspace を/usr/local/workspaceとしようとして、失敗し(当然ながら?)改めてworkspaceを/home/maiko100/workspace としました。その後このトラブルが発生しています。 再起動しても解決しませんでした。
補足
自己レスです。 ワークスペースが NFS 上にあると起動できない場合は、 /usr/local/share/eclipse/configuration/config.ini のeof=eofの手前に osgi.locking=none の 1 行を追記するとうまくいきました。 下記の記事を書かれた方、この場を借りてお礼申し上げます。 http://www.hpc.cs.ehime-u.ac.jp/~aman/linux/index.php?Eclipse http://sel.ist.osaka-u.ac.jp/~m-itii/php/d/soliloquy.php?mode=daily&date=2007%2F4%2F7