PHPで作る「昨日・今日・合計カウンター」のスクリプトです。
なお、以前、掲載したものの改定版です。
http://webmaster.chielog.com/php/121.html
この改訂版では、昨日より前にアクセスがない場合でも正常に処理できるようになっています。
一応、自分の管理するサイトでは正常に動いているので問題の無いスクリプトだとは思うのですが、動かない人のために少々ですがヒントを。
【ヒント】
・ ログファイルからログの行を取得する時、正しく取得してるかを出力して確認
・ ログファイルにログの行を出力する時、正しく出力してるかをログを見て確認
・ 入出力がおかしい時には、スクリプトの行ごとに変数の中身を確認してみる
・ 日付が適切な日付として記録されているか
<?php //ログ形式は 日付け|昨日のカウント|今日のカウント|合計カウント $now_date = date('Ymd'); // 今日の日付 $ydy_date = date('Ymd', strtotime('-1 day')); // 昨日の日付 // カウンタ記録ファイル $count_log = dirname(__FILE__) .'/count.log'; $dat = file($count_log); //ログを配列に読み込む if (!empty($dat)) { //変数を展開(比較用日付、昨日、今日、総合) 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('%05d', $ydy); //昨日 $tdy = sprintf('%05d', $tdy); //今日 $ady = sprintf('%08d', $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として出力 echo $ydy.'|' ; echo $tdy.'|' ; echo $ady ; //end
一応、こんな感じですが、カウントの動作がおかしいなどの不具合がありましたら、コメントしていただけるとありがたいです。
なお、スクリプトのご利用は自己責任でお願いします。
ピンバック: PHPで作るアクセスカウンター【昨日・今日・合計】 | WEBマスターの知恵ブログ