PHP+MySQLでアクセスカウンタ!
Updated:
今日は、 この間自分の ホームページ にテキストファイルを使った簡単なアクセスカウンタをPHPで作って稼働させてましたが、 やっぱりちゃんとしたもの、つまり、同じIPからのアクセスはある程度制限かけたり、データベースを使って動かしたり、ということがしてみたくなり、いろいろ調べながらやってみました。
導入にあたり、こちら「 DA実験室 :: PHP+MySQLのスクリプト配布 」 を参考にさせてもらいました。 ご参照下さい。
こちら では以下の3種類のカウンターがありますが、 今回は「 カウンター3 」を導入しました。
- カウンター1
単純にカウントするだけのカウンター。
同ホスト連続アクセス検査用の機能も付いてます。 - カウンター2
カウンター1の機能に加え、昨日・今日の値もカウントできるように
改良したカウンター。 - カウンター3
カウンター2の機能に加え、同ホスト連続アクセスの判定に
制限時間を付けられます。制限時間を超えてアクセスした場合は、
同ホストでもカウンターを更新します。
導入記録
1.サンプルソースダウンロード&展開
こちらの「 DA実験室 :: PHP+MySQLのスクリプト配布 」の ダウンロードページ から「 DACNT dacnt-2.1.zip 」をダウンロード&展開する。
2.データベース作成
今回使用するテーブルを作成するためにまずMySQLにデータベースを作成する。 コマンドプロンプトから行いました。 (phpMyAdminを使用してもOK)
C:\mysql\bin>mysql -u root -p
Enter password: ***************
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 5.0.67-community MySQL Community Edition (GPL)
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> create database mkmode; < - - - 例として mkmode を作成
Query OK, 1 row affected (0.01 sec)
mysql> grant all privileges on mkmode.* to ユーザ名@localhost identified by 'パスワード'; < - - - ユーザを作成
Query OK, 0 rows affected (0.03 sec)
mysql> exit
Bye
3.テーブル作成
ダウンロードしたファイルの中の「 dacnt3.sql 」を使用してテーブルを作成する。 当方はあらかじめ「 dacnt3.sql 」を「 C:\mysql\bin 」に置きました。 コマンドプロンプトから以下のようにする。
C:\mysql\bin>mysql -u root -p mkmode < dacnt3.sql
Enter password: ***************
テーブルが作成されたか確認してみる。
C:\mysql\bin>mysql -u root -p mkmode
Enter password: ***************
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 14
Server version: 5.0.67-community MySQL Community Edition (GPL)
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> show tables;
+------------------+
| Tables_in_mkmode |
+------------------+
| dacounter3 |
+------------------+
1 row in set (0.01 sec)
mysql>
4.レコード作成
あらかじめテーブルにレコードを作成しておく。
mysql> INSERT INTO daCounter3 (name) VALUES ('cnt');
Query OK, 1 row affected (0.00 sec)
mysql>
5.PHPソースの修正
以下のPHPソースを自分の環境に合わせて修正する。
・「 dacnt.php 」
19: $dbHost データベースのホスト名を記述します。
通常は 'localhost' です。
22: $dbName データベースの名前を記述します。
23: $dbUser データベースのユーザー名を記述します。
24: $dbPass データベースのパスワードを記述します。
27: $timediff GMTとの時差を秒で記述します。
日本は+9時間なので32400です。
・「 dacnt3.php 」
21: $tblName 使用するテーブルの名前を記述します。
(実際には今回使用するテーブル「 daCounter3 」
33: $interval 制限時間を秒で記述します。
標準は1800(30分)です。
6.ソースのアップロード
以下のソースをWebサーバ(ドキュメントルート)へアップロードする。 dacnt.php dacnt3.php
7.ソース作成
アクセスカウンタを埋め込むページのPHPソースに以下のように記述を追加する。 ※今回も数字は画像を使用するので、 ドキュメントルートの「 images/counter 」フォルダに 「 0.gif 」~「 9.gif 」を置いています。
open();
// 値を読み取るだけの場合
//$cnt->read('cnt'); < - - - 今回は使用しないのでコメントアウト
// 値を更新する場合 (単純カウント)
//$cnt->update('cnt'); < - - - 今回は使用しないのでコメントアウト
// 値を更新する場合 (IPアドレスで重複検査)
//$cnt->update('bbs', $REMOTE_ADDR); < - - - 元のソースでは最近のPHPでは使えないので変更
$cnt->update('cnt', $_SERVER["REMOTE_ADDR"]);
// データベースを閉じる
$cnt->close();
// 値を取得して表示する例
echo '
<div>総計: ';
echo $cnt->makeImgTag( $cnt->getCount(), 6, 'images/counter/%d.gif', '%d' );
echo '</div>
';
echo '
<div>今日: ';
echo $cnt->makeImgTag( $cnt->getCountToday(), 6, 'images/counter/%d.gif', '%d' );
echo '</div>
';
echo '
<div>昨日: ';
echo $cnt->makeImgTag( $cnt->getCountYeday(), 6, 'images/counter/%d.gif', '%d' );
echo '</div>
';
//[テキスト形式ならこちら]
//echo '
<div>総計: '.$cnt->getCount().'</div>
';
//echo '
<div>今日: '.$cnt->getCountToday().'</div>
';
//echo '
<div>昨日: '.$cnt->getCountYeday().'</div>
';
?>
上記は基本です。 当方はさらに手を加えてデザイン変更もしています。
8.動作確認
うまくいけばこんな感じにできるはず。 ※今回は30分以上間をおかないと同じIPからのアクセスはカウントしないような設定にしています。
以上で終わりのはずです。
※上記の設定手順はLinuxでもほぼ同じにできました。
とりあえず、これで様子をみてみようっと!
じゃ、また。
Comments