phpでカウンタを実装するソースコード
phpファイルと同一階層にdataディレクトリが存在していること
▼phpソースコード
<?php
date_default_timezone_set('Asia/Tokyo');
//ログ形式は 日付け|昨日のカウント|今日のカウント|合計カウント
$now_date = date('Ymd'); // 今日の日付
$ydy_date = date('Ymd', strtotime('-1 day')); // 昨日の日付
// カウンタ記録ファイル
$danm = basename($_SERVER['PHP_SELF']);
$danm = str_replace(".php", ".txt", $danm);
$count_log = dirname(__FILE__) .'/data/'.$danm;
$fp = fopen($count_log, 'a'); //ログファイル読み込み
$dat = file($count_log); //ログを配列に読み込む
if (empty($dat)) { //ログが空の場合
flock($fp, LOCK_EX);
fputs($fp, '|||');
fclose($fp);
}
//変数を展開(比較用日付、昨日、今日、総合)
list($key_date, $ydy, $tdy, $ady) = explode('|', $dat[0]);
if ($key_date === $now_date) { //ログの日付が今日ならカウントアップ
$tdy++;
} elseif ($key_date === $ydy_date) { //日付が変わったら昨日に今日を、今日に1を入れる。
$ydy = $tdy;
$tdy = 1;
} else { //ログの日付が今日でも昨日でもない場合(昨日以前最近のアクセスが0)
$ydy = 0; //昨日のアクセスは0となる
$tdy = 1; //今日の最初のアクセス
}
$ady++; //合計カウントアップ
//桁数整形
$ydy = sprintf('%03d', $ydy); //昨日
$tdy = sprintf('%03d', $tdy); //今日
$ady = sprintf('%06d', $ady); //合計
//ファイル更新
$new_dat = implode('|', array($now_date, $ydy, $tdy, $ady));
$fp = fopen($count_log, 'r+');
flock($fp, LOCK_EX);
fputs($fp, $new_dat);
fclose($fp);
//htmlとして出力
$ady = sprintf('%05d', $ady); //合計
echo 'document.write("Total: '.$ady.'<br>Today: '.$tdy.'<br>Yesterday: '.$ydy.'");';
//end
?>