●はじめに
本日の来訪者数を表示するように改造してみました。timeを使って時間を取得し、日付がかわったら0クリアするようになっています。なお、私のカウンタでは、例えば1月1日に誰かがアクセスした後、次のアクセスが2月1日だったときには、0クリアされないという欠点がありますが、かんべんね。
●実行例(このページをリロードしてみよう)
あなたで08366人め(本日002人)
●導入手順
1.「count_p2.cgi」を入手します
-
これをFTPで自分のサイトに転送します。
2.カウンタ値を保存する「count.log」を作成します。
-
$echo 0 >count.log
※「$」はUNIXのプロンプトだから入力する必要はないよ。
3.ファイルのパーミッションを変更します
-
$chmod 755 count_p2.cgi
$chmod 606 count.log
4.動作確認をします
-
$count_p2.cgi
$cat count.log
count_p2.cgiを何度か実行してcount.logの内容が更新されればOKです。
5.HTML文書にスクリプトを実行するための1行を入れます
-
あなたで<!--#exec cmd="count_p2.cgi"-->人め
●リスト
#!/usr/local/bin/perl
#本日の来訪者数付きカウンタ▲(c)p4room(http://p4room.mda.or.jp/~roro/)
$file = "count.log"; #カウンタ保存用ファイル。chmodの設定は606
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtime(time);
#現在時刻を取得
open(FILE,"+<$file") || die "$fileが開けません"; #読み書き両用オープン
flock(FILE,2); #ロックする(使用中なら未使用になるまで待つ)
chop(@count = <FILE>); #カウンタを配列に読み込む
if ($mday != $count[2]) { #日付けが変わったら
$count[1]="0"; $count[2]=$mday; #今日カウンタを0にする。日付を更新する
}
$count[0]++; #合計カウンタを+1する
$count[1]++; #今日カウンタを+1する
seek(FILE,0,0); #ファイルポインタを先頭に戻す
print FILE "$count[0]\n"; #合計カウンタ書き出し
print FILE "$count[1]\n"; #今日カウンタ書き出し
print FILE "$count[2]\n"; #日付を書き出し
truncate(FILE,tell); #現在より後ろを削除
printf("あなたで<font size=6>%05d</font>人め(本日%03d人)",$count[0],$count[1]);
flock(FILE,8); #ロック解除
close(FILE); #クローズ
exit; #おしまい