●はじめに
ダウンロードカウンタをPeal版に書き直してみました。
●実行例(downld2.lzhをダウンロードしてからリロードしてみよう)
downld2.lzhをダウンロードします
これまで3091
回ダウンロードされました。
●導入手順
1.「downld2.cgi」を入手します
-
このファイルを開いて、ダウンロードしたいファイルのURLを書き換えます。それから、FTPで自分のサイトに転送します。
2.カウンタ値を保存する「count.log」を作成します。
-
$echo 0 >count.log
※「$」はUNIXのプロンプトだから入力する必要はないよ。
3.ファイルのパーミッションを変更します
-
$chmod 755 downld2.cgi
$chmod 606 count.log
4.動作確認をします
-
$downld2.cgi
$cat count.log
downld2.cgiを何度か実行すると次のような行が現れます。
Location:http://www.big.or.jp/~roro/webtech/downld2/downld2.lzh
そうしたらcount.logの内容を調べて値が更新されればOKです。
5.HTML文書にスクリプトを実行するための2行を入れます
-
<a href=downld2.cgi>プログラムのダウンロード</a>
これまで<!--#exec cmd="awk '{printf \"%d\",$1}' count.log"-->回のアクセスがありました。
これでダウンロードしたときにカウントされ、ホームページにアクセスしたとき「これまで3回のアクセスがありました」と表示されます。ちなみに、表示部分は次のようにしてもよいのですが・・・
-
<a href=downld2.cgi>プログラムのダウンロード</a>
これまで<!--#exec cmd="cat count.log"-->回のアクセスがありました。
これだと、count.logが誰でも書き込めるファイルになっているので、いたずらされる危険があります。たとえば、誰かがcount.logを「ばーかあーほ」とか書き換えてしまうと「これまで ばーかあーほ 回のアクセスがありました」と表示されてしまいます。しかし、最初の方法ならば最悪の場合でも「これまで0回の……」になるだけですみます。
●リスト
#!/usr/local/bin/perl
#基本ダウンロードカウンタ▲(c)p4room(http://p4room.mda.or.jp/~roro/)
$file = "count.log"; #カウンタ保存用ファイル、chmodの設定は606
$url = "http://p4room.mda.or.jp/~roro/webtech/downld2/downld2.lzh";
#ダウンロードしたいファイルのURLを指定する
open(FILE,"+<$file") || die "$fileが開けません"; #読み書き両用オープン
flock(FILE,2); #ロックする(使用中なら未使用になるまで待つ)
chop($count = <FILE>); #カウンタを読み出す
$count++; #$count = $count + 1 と同じ
seek(FILE,0,0); #ファイルポインタを先頭に戻す
print FILE "$count\n"; #ファイルに書き込む
truncate(FILE,tell); #現在より後ろを削除
flock(FILE,8); #ロック解除
close(FILE); #クローズ
print "Location:$url\n\n"; #ダウンロードしたいファイルのURLを指定
exit; #おしまい