前回作ったアクセスカウンターは、「累計のカウント値」のみでした。
高機能なカウンターになると「累計」の他に、「前日のカウント値」と「本日のカウント値」も表示できるものがあります。
ということで作ってみました。
■アクセスカウンター(counter.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]);
?>
[表示結果]
本来なら配列$dataで取得せずに、変数名で意味のわかるように書かないとダメなんですが、今回はこの規模なので簡略化してしまいました。
list($day, $total_cnt, $today_cnt, $yesterday_cnt)= explode();で取得して
implode($delimiter, array($today, $total_cnt, $today_cnt, $yesterday_cnt))を保存するべき