#!/usr/local/bin/perl

;#-----------------------------------
;#
;#  昨日と本日の比較カウンタ v1.0
;#  (c)rescue.ne.jp
;#
;#-----------------------------------

# このシステムは、必ず１日に１アクセスあることが前提で動作します。
# ファイルロックを使いませんが、ファイル破損の可能性が低い設計となっています。
# １アクセス毎に１バイトずつカウントファイルサイズが大きくなりますのでご注意ください。

# 設置構成
#
# ホームページディレクトリ
#            |
#            |-- index.html (このファイルにカウンタを表示する) (*)
#            |
#            |          このファイルのカウンタを表示させたい場所に次のSSIコマンドを書く.
#            |          <!--#exec cmd="./count/qcount.pl"-->
#            |
#            |---- count/ <777>
#            |       |
#            |       |-- qcount.pl (このスクリプト) <755>
#            |       |-- 数字を記録するファイルは自動で作成/削除されるので用意しない
#            |           (月日をファイル名とする記録ファイル：ファイルのサイズ＝カウント数)
#            |
#            |---- images/
#                    |
#                    |-- 0.gif (数字画像 0)
#                    |-- 1.gif (数字画像 1)
#                    |-- 略
#                    |-- 9.gif (数字画像 9)

#■(*)印のファイルから見たcount/ディレクトリの位置を設定(パス) <絶対パスで書いてもよい>
$basedir = './count/';

#■(*)印のファイルから見たimages/ディレクトリの位置を設定(ＵＲＬ) <http://から書いてもよい>
$graphics = './images/';

#一昨日(48時間前)のファイル名（削除するファイル名）
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time - 48*60*60);
$date2 = sprintf("%02d%02d",$mon +1,$mday);
$delfile = $basedir . $date2;

#必要なくなった一昨日のファイルを削除する
unlink("$delfile");

#昨日(24時間前)のファイル名
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time - 24*60*60);
$date1 = sprintf("%02d%02d",$mon +1,$mday);
$yesterday = $basedir . $date1;

#本日のファイル名
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
$date0 = sprintf("%02d%02d",$mon +1,$mday);
$file = $basedir . $date0;

#本日のファイルに改行(1バイト)を１つ追加する

if (!open(NEW,">>$file")) { &error('記録不可'); }
print NEW "\n";
close NEW; 

#ＦＴＰで編集できるようにモード変更しておく
chmod(0666,$file);

#本日のカウント数(サイズ)を取得
if (-z $file || !-e $file) { &error('記録されず(設置ミス)'); }
else { $count = -s $file; }

#出力
print "本日はあなたで";

#本日のカウント数を<IMG>処理する
foreach (0..length("$count")-1) { $img = substr($count,$_,1);
print "<img src=\"$graphics$img.gif\" alt=\"$img\" border=\"0\">"; }
#画像ではなく文字で出力する場合はこちらを使う
#print $count;

#出力
print "アクセス目ですが、昨日は";

#昨日のカウント数(サイズ)を取得
if (-z $yesterday || !-e $yesterday) { &error('記録されていません.'); }
else { $count2 = -s $yesterday; }

#昨日のカウント数を<IMG>処理する
foreach (0..length("$count2")-1) { $img = substr($count2,$_,1);
print "<img src=\"$graphics$img.gif\" alt=\"$img\" border=\"0\">"; }
#画像ではなく文字で出力する場合はこちらを使う
#print $count2;

#出力
print "アクセスありました.<p>";

exit;

sub error {

	if (-e $lockfile) { unlink($lockfile); }
	print $_[0];
	exit;
}
