前回作ったアクセスカウンターは、「累計のカウント値」のみでした。


高機能なカウンターになると「累計」の他に、「前日のカウント値」と「本日のカウント値」も表示できるものがあります。


ということで作ってみました。



■アクセスカウンター(counter.php)
<?php
$file= "./count.txt";
$total_keta= 7; // 累計の桁
$today_keta= 5; // 前日と本日の桁
$delimiter= ':';


// 本日の日付取得
$today= date("j");



// カウント値読み出し
// フォーマット(last-count-day):(total):(today):(yesterday)
$data= file_exists($file) ?
explode($delimiter, rtrim(file_get_contents($file))) : array(0,0,0,0);



// カウント値を1上げる
if ($data[0] == $today){ // 最後にカウントした日付と同日なら
    $data[2]++;
} else if ($data[0] == date("j", time()-60*60*24)){ // 前日カウントなら組み換え
    $data[3]= $data[2]; $data[2]= 1;
} else {
    $data[3]= 0; $data[2]= 1;
}
$data[1]++;
$data[0]= $today;



// 書き出し
file_put_contents($file, implode($delimiter, $data), LOCK_EX);



// 表示
printf("累計%0{$total_keta}d 昨日%0{$today_keta}d 本日%0{$today_keta}d", $data[1], $data[3], $data[2]);


?>



[表示結果]
累計0000006 昨日00002 本日00004


本来なら配列$dataで取得せずに、変数名で意味のわかるように書かないとダメなんですが、今回はこの規模なので簡略化してしまいました。


list($day, $total_cnt, $today_cnt, $yesterday_cnt)= explode();で取得して
implode($delimiter, array($today, $total_cnt, $today_cnt, $yesterday_cnt))を保存するべき