【SQLite+PHP】カウンタの実装1

SQLiteとPHPを使ってホームページにカウンタを作成する方法について記載します。DBサーバでカウントする方式です。

環境

 OS ubuntu22.04 
 Webサーバ apache2.4.52(自身のIP 192.168.19.128とする)
 SQLite 3.37.2
 PHP 8.1.2-1ubuntu2.14

カウンタ用DBの作成

SQLiteを使ってカウントを保存するDBを作成します。
SQLiteのコマンドラインから次のSQLを実行し、DBを作成します。

$ > sqlite3 counter.db
sqlite> CREATE TABLE IF NOT EXISTS counter (id INTEGER PRIMARY KEY,count INTEGER)”;

すると、同じフォルダに、「counter.db」ファイルが生成されるので、

/var/www/html/php/counter.db

に移動させます。
 同DBファイルのパーミッションは「604」としました。

カウンタプログラムの作成

 次のPHPプログラムを作成し、「/var/www/html/php/」フォルダに配置した後パーミッションを「705」に設定しました。

ファイル名 counter2.php
<?php
$db = new SQLite3(‘./counter.db’);
$query = ‘SELECT count FROM counter WHERE id = 1’;
$result = $db->query($query);
if ($row = $result->fetchArray()) {
$visit_count = $row[‘count’];
$visit_count++;
} else {
$visit_count = 1;
$insert_query = ‘INSERT INTO counter (count) VALUES (1)’;
$db->exec($insert_query);
}
$update_query = “UPDATE counter SET count = $visit_count WHERE id = 1”;
$db->exec($update_query);
$db->close();
echo “訪問回数: $visit_count”;
?>


 

確認

ブラウザから、
  http://192.168.19.128/php/counter.php
にアクセスするたびに、訪問回数が1づつ増えていきます。
 ubuntuからSQLite3コマンドラインを使用して次のSQLを入力すると、現在のカウントを確認することができます。

SQLite > select count from counter where id = 1;

●問題点の解決について
 DBを使ったカウンタは実装できましたが、以前上げた問題点
   画面を更新する(F5)たびに訪問回数がインクリメントされてしまう
   http://192.168.19.128/php/counter.txt → counter.db を直接閲覧されてしまう
の解決はできていないので、次回修正します。