- クリックカウンタ -
♣クリックカウンタ
リンクから一度CGIへ飛び、処理をした後、再度同じHTMLファイルに戻る。 それがカウントアップして表示されている。
<<clic.cgi>>
#!C:\Perl\bin\perl
#===================================================
# 各種設定
#===================================================
$lockfile = "./lock";
#===================================================
# カウントアップ
#===================================================
$url = $ENV{'QUERY_STRING'};
&lock;
open (IN,"<cntdata.dat") || &error; #ログファイルからデータの読み込み
$cnt = <IN>;
close IN;
$cnt++; #カウントアップ
$count = sprintf("%05d", $cnt);
open (OUT,">cntdata.dat") || &error;
print OUT $count; #記録の更新
close OUT;
&unlock;
print "Location: $url\n\n"; #クエリ文字以下のページにジャンプさせる
exit;
#===================================================
# エラーと排他処理サブルーチン
#===================================================
sub lock {
$retry = 3;
if (-e $lockfile) {
$locktime = (stat($lockfile))[9];
if ($locktime < time - 60) {&unlock;}
}
while (!mkdir($lockfile, 0755)) {
if (--$retry < 0) {&error;}
sleep(1);
}
}
sub unlock {rmdir($lockfile);}
sub error {exit;}
-----------------------------------------------------
<<sample.cgi>>
<a href="http://localhost/tue/click.cgi?http://localhost/tue/sample.shtml">
<img src="./i-04.gif" border="2" vspace="2"></a><br>
クリック数:<!--#include file="./cntdata.dat"-->
クリックしてcgiを呼び出しカウントアップ。そのデータをinclude filでHTMLファイルに表示している。