Tips

2014.09.29

PHP カウンタ―の作成 【応用編 第1回】

DBにアクセス数を保存する

ファイルではなくDBにアクセス数を保存することもできます。

例えば mysql を使用している場合は下記のような感じになります。

初めに下記のようなテーブルが作成されていることが前提です。

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| testdb             |
+--------------------+
3 rows in set (0.00 sec)
mysql> select * from count_tb;
+---------+
| counter |
+---------+
|       1 |
+---------+
1 row in set (0.00 sec)

下記のようなコードでDBのカウンタの値を増やすことができます。

<?php

  //接続情報の定義
  $hostname = 'localhost';
  $username = 'root';
  $password = '';
  $dbname = 'testdb';
  $tblname = 'count_tb';
  $column = 'counter';

  //データベースへの接続をする
  $connect = mysql_connect($hostname, $username, $password);

  //データベースを選択する
  mysql_select_db($dbname);

  //保存されているアクセスカウンタ数を得るSQLを作成
  $sql = "SELECT $column FROM $tblname";

  //上記SQLを実行する
  $result = mysql_query($sql);

  //結果を配列に格納する
  $count_val = mysql_fetch_array($result);

  //配列に保存されているカウンタを変数に格納する
  $count = $count_val[$column];

  //カウンタの値を1増やす
  $count = $count + 1;

  //増やしたカウンタをデータベースに保存するSQLを作成
  $sql = "UPDATE $tblname SET $column=$count";

  //上記SQLを実行する
  $result = mysql_query($sql);

  echo "このページに対して".$count."回目のアクセスです";

?>

上記では mysql_connect によりDBに接続を行い、
mysql_select_db でアクセスするデータベースを選択しています。

mysql_query により SQLした結果を mysql_fetch_array により格納します。

値を増やしてから再び mysql_query にて DBに保存してます。


セッションを使用してカウンタを作成する

上記のカウンタの場合は単純にページにアクセスするたびに、

ファイルにアクセス数を保存しているだけなので、

ブラウザ上で F5 などで画面を更新するとカウンタの値がどんどん増えていってしまいます。

セッションを使用することで

1度ページにアクセスしたらセッションが終了するまでは(ブラウザを終了するなど)

カウンタの値を増やさないようにすることができます。

セッションを使用して下記のような感じでカウンタを作成できます。

<?php

  //セッションの作成
  session_start();
  //カウンタを保存するファイル名を定義
  $file_name = './count.log';

  //ファイルが存在するかどうか
  if(!file_exists($file_name)){
    //存在していない場合はファイルを作成する
    touch($file_name);
  }

  //セッション変数 login が存在しているか確認
  if(!isset($_SESSION['login'])){
     //存在していなかったら login フラグを ON にする
     $_SESSION['login'] = 1;

     //ファイルに対してアクセス数を1増やして書き込みを行う
     $val = file($file_name);
     $_SESSION['counter'] = $val[0] + 1;
     file_put_contents($file_name, $_SESSION['counter']);

     echo "このページに対して".$_SESSION['counter']."回目のアクセスです";
  }

  else {
     echo "このページに対して".$_SESSION['counter']."回目のアクセスです";
  }


?>

session_start によってセッションが作成されます。

すると $_SESSION[‘変数名’] に保存した値はセッションが終了しない限りは、

ページを更新したり、別のページに遷移しても残しておくことができるので、

これを使ってセッションが終了するまでカウンタを増やさないようすることができます。

上記では $_SESSION[‘login’] にセッションしたかどうかのフラグを保存しておくことで、

このフラグがあるうちはカウンタを増やさないようにしています。

今回はここまでにします。

新連載はじまりました!新PHP基礎 連載リンク

PHP基礎 連載

Recent News

Recent Tips

Tag Search