PHPで作るアクセスカウンター【昨日・今日・合計】

PHPでアクセスカウンターを作ってみました。

いわゆる昨日・今日・合計形式のテキストカウンターです。

【追記】このスクリプトの改訂版を掲載しました。(2014/01/29)
http://webmaster.chielog.com/php/182.html

作ったといっても一から作るのではなく、レッツPHP!さんの昨日・今日カウンターをカスタマイズしてみました。

カスタマイズといっても大分変更してシンプルにしてあります。

<?php
//ログファイルcount.logの形式は1行のみで以下の通り。
//今日の日付け|昨日のカウント|今日のカウント|合計カウント
//例:20120101|07777|05555|09999999
$now_date = date('Ymd') ; // 今日の日付
$yes_date = date('Ymd', strtotime('-1 day')) ; // 昨日の日付
// カウンタ記録ファイル
$count_log = 'count.log' ;
$dat = file($count_log) ; //ログを配列に読み込む
if (!empty($dat)) {
    //変数を展開(比較用日付、昨日、今日、総合)
    list($key, $yes, $tod, $all) = explode("|", $dat[0]) ;
    if ($key === $now_date) { //ログの日付が今日ならカウントアップ
        $tod++ ;
    } elseif ($key === $yes_date) { //日付がかわったら昨日に今日を、今日に1を入れる。
        $yes = $tod ;
        $tod = 1 ;
    }
    $all++ ; //合計カウントアップ

    //桁数整形
    $yes = sprintf("%05d", $yes) ;
    $tod = sprintf("%05d", $tod) ;
    $all = sprintf("%08d", $all) ;
    //ファイル更新
    $new = implode("|", array($now_date,$yes,$tod,$all)) ;
    $fp = fopen($count_log, "r+") ;
    flock($fp, LOCK_EX) ;
    fputs($fp, $new) ;
    fclose($fp) ;
}
echo $all.'|' ;
echo $tod.'|' ;
echo $yes     ;
//end

こんな感じです。

レッツPHPさんとの違いは、

  1. 画像を無くし、テキストオンリーにしたこと
  2. fopen関数をwモードではなくr+モードにしたこと
  3. 桁数を整形してからファイルに書き出ししていること
  4. 日付変更時のロジックを簡略化

などなどです。

カスタマイズの理由は、

  1. テキストのみの方が軽い
  2. fopenをwモードで処理するとファイルが壊れる(ファイルが空になる瞬間あるため)
  3. 先に桁数を整形した方が、日付変更時に桁数違いのバグが出ない
  4. 三項演算子の処理が不要だったので簡略化

というわけです。

アクセスカウンターを作成している人の参考までに。

なお、スクリプトのご利用は自己責任でお願いします。

fopen関数とfputs関数の仕様についての関連記事
http://webmaster.chielog.com/php/125.html

カテゴリー: PHP, WEB パーマリンク

5 Responses to PHPで作るアクセスカウンター【昨日・今日・合計】

  1. 長谷川 のコメント:

    合計は正常に加算されるんですが、今日のカウントが1と2を繰り返すのはこちらの環境が悪いんでしょうか。
    何かヒントいただければ嬉しいです。

  2. ピンバック: 【PHP】昨日・今日・合計のカウンタースクリプト【改訂版】 | WEBマスターの知恵ブログ

  3. 管理人 のコメント:

    コメントありがとうございます。
    長谷川様の環境および実行コードが不明なので、参考になるようこちらで改訂版として新たにカウンタースクリプトの記事を投稿しました。
    ご参考までにどうぞ。
    http://webmaster.chielog.com/php/182.html

  4. 長谷川 のコメント:

    お返事ありがとうございます。
    おかげさまで無事にカウントできました。
    こちらの環境はWindowsXPにApacheで、PHPは5.2という環境です。
    もしかしたら最初に作成したカウントデータ用のテキストファイルの内容が変だったのかもしれません。
    本当にありがとうございました。

  5. 管理人 のコメント:

    解決されたようでよかったです。
    自分もコードの見直しができて助かりました。

コメントを残す

メールアドレスが公開されることはありません。