同時にアクセスされるとカウントがリセットさせるバグを修正しました。
ファイルロックの重要性がよく分かりました^^;
TOPページでの公開はもう少し様子を見てから行います。
#!/usr/bin/perl ####################################################### #スクリプト名:ROS カウンター Ver.1.02 #作者:ORBIT #著作権:ORBIT SPACEに帰属します。 #著作権表示は一切行いません。自由にお使いください。 ####################################################### #各種設定 #------------------------------------------------------ #イメージの保存ディレクトリ $imgs = './img/'; #ログの保存場所 $ip_log = 'ip.log'; $counts_log = 'counts.log'; #------------------------------------------------------ #IPを取得 $ip = $ENV{'REMOTE_ADDR'}; #GETのデータから位を取得 $buf = $ENV{'QUERY_STRING'}; --$buf; #過去ログの取得 open (OUT,"$counts_log"); flock(OUT, 1); $counts_data = <out>; close(OUT); open (IP_OUT,"$ip_log"); flock(IP_OUT, 1); @ip_data = <ip_OUT>; close(IP_OUT); chomp($ip_data[0]); if($ip eq $ip_data[0]){&img;} $ip_data[0] = "$ip_data[0]n"; #インクリメントして保存 open (IN,">$counts_log"); flock(IN, 2); if($counts_data eq ""){$counts_data = "00000"}; ++$counts_data; print IN $counts_data; close(IN); #IPを記録 open (IP_IN,">$ip_log"); flock(IP_IN, 2); unshift @ip_data, "$ipn"; print IP_IN @ip_data; close(IP_IN); &img; # 画像表示 sub img{ #過去ログを取得し逆順に並べ替える @list = split(//,$counts_data); @img_list = reverse (@list); $nu = $img_list[$buf]; open(IG,"$imgs$nu.gif"); print "Content-type: image/gifnn"; binmode(IG); binmode(STDOUT); print <ig>; close(IG); exit; }
0 Comments.