(6) SQLiteでアクセスカウンタ作成 #1

投稿者: | 2016年10月22日

2,739 views

この記事は最終更新から 413日 が経過しています。

やってみたいこと

簡易データベースとしてSQLiteはとっても便利。
データベースなので、データアクセス時の排他制御をやってくれる。
よってSQLiteを使うと容易にアクセスカウンタを実装できる。

実行サンプルはこちらです。
http://www.dogrow.net/php/sample/00006/

プログラム作成

カウンタプログラムを別ファイルでクラス実装してみた。

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>SQLiteサンプル</title>
</head>
<body>

<?php
  require_once("CCounter.php");
  $cCnt = new CCounter();
  $cCnt->connect_db();        // DB接続
  $cnt = $cCnt->count_up();   // カウントアップ&値取得
  $cCnt->disconnect_db();     // DB切断
  echo "counter : ".$cnt;     // カウント値を表示
?>

</body>
</html>
<?php
class CCounter {
  private $m_db;        // SQLite3 instance
  private $m_db_fpath;  // DBファイルパス

  ////////////////////////////////////////////////////////
  // コンストラクタ
  function __construct( $fpath = "cnt.db" ) {
    $this->m_db = null;
    $this->m_db_fpath = $fpath;
  }

  ////////////////////////////////////////////////////////
  // DB接続
  function connect_db(){
    if($this->m_db == null){
      // DBファイル存在確認
      $isDbExist = file_exists($this->m_db_fpath);
      // DB接続
      $this->m_db = new SQLite3($this->m_db_fpath);
      $this->m_db->enableExceptions(TRUE);
      // DBは新規作成?
      if($isDbExist === FALSE){
        try {
          // テーブルを作成し、カウント値を0で初期化
          $this->m_db->exec("CREATE TABLE `mytbl` (`cnt` INTEGER);");
          $this->m_db->exec("INSERT INTO `mytbl` (`cnt`) VALUES(0);");
        }catch(Exception $e){
          echo "[".__LINE__."] Caught exception: ".$e->getMessage();
        }
      }
    }
  }

  ////////////////////////////////////////////////////////
  // DB切断
  function disconnect_db(){
    if($this->m_db != null){
      $this->m_db->close();
      $this->m_db = null;
    }
  }

  ////////////////////////////////////////////////////////
  // カウンタ更新&更新値を取得
  function count_up(){
    $cnt = 0;
    if($this->m_db != null){
      try {
        // カウンタをインクリメント
        $this->m_db->exec("UPDATE `mytbl` SET `cnt`=`cnt`+1;");
        // カウンタの値を取得
        $rs = $this->m_db->query("SELECT `cnt` FROM `mytbl`;");
        $row = $rs->fetchArray();
        $cnt = $row['cnt'];
      }catch(Exception $e){
        echo "[".__LINE__."] Caught exception: ".$e->getMessage();
      }
    }
    return $cnt;
  }
}
?>

 
実行サンプルはこちらです。
http://www.dogrow.net/php/sample/00006/


アクセス数(直近7日): ※試験運用中、BOT除外簡易実装済
  • 2026-06-14: 1回
  • 2026-06-13: 0回
  • 2026-06-12: 2回
  • 2026-06-11: 2回
  • 2026-06-10: 0回
  • 2026-06-09: 0回
  • 2026-06-08: 0回
  • コメントを残す

    メールアドレスが公開されることはありません。 が付いている欄は必須項目です


    日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)