ROS カウンター Ver.1.02

同時にアクセスされるとカウントがリセットさせるバグを修正しました。
ファイルロックの重要性がよく分かりました^^;
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;
}

Leave a Comment


NOTE - You can use these HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

(Spamcheck Enabled)

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)