PHPでアクセスカウンタを作る

(1/1)
無料のアクセスカウンタは数多くあるが、中にはアクセスログを横取りする悪質なカウンタもある。PHP が使えるなら、自分自身のサイトにカウンタを置いておきたい。
ここでは、最も基本的なカウンタ・プログラムの作り方を紹介する。

サンプル・プログラム

ダウンロード(PHP4/5共用)

サンプル・プログラムの解説:準備

アクセス回数はテキストファイル $CounterFile に保持しておく。
space
初めてプログラムを走らせたときは、$CounterFile は無い。
PHP スクリプトは、自分自身が初めて起動されたかどうかを知ることはできないので、関数  file_exists  を使い、$CounterFile が存在しているかどうか検査する。
存在していなければ、初期値 0 を代入したファイルを生成し、関数  chmod  によって所有者に書き込み権限を与える。

0009: //カウンタを記録するファイル名;write enable属性を与えておくこと
0010: $CounterFile = './mycounter.txt';
0011: 
0012: //カウンタ・ファイルがあるかどうか調べ、無ければ作成する
0013: if (! file_exists($CounterFile)) {
0014:     $fp = @fopen($CounterFile, 'w');
0015:     fputs($fp, '0');
0016:     fclose($fp);
0017:     chmod($CounterFile, 0644);
0018: }

サンプル・プログラムの解説:カウンタの増加

カウンタ $CounterFile の値を 1 だけ増加させ、更新する。
space
更新時には、同時に複数のスクリプトが更新をかけることがないように、関数  flock  によってロックしておく。

0020: //直前のカウンタ値を読み込む
0021: $fp = @fopen($CounterFile, 'r');
0022: $cnt = fgets($fp);
0023: fclose($fp);
0024: 
0025: //カウンタを+1だけ増加
0026: $cnt++;
0027: 
0028: //カウンタ値を書き戻す
0029: $fp = @fopen($CounterFile, 'w');
0030: flock($fp, LOCK_EX);         //ロックをかける
0031: $s = sprintf("%d", $cnt);
0032: fputs($fp$s);
0033: flock($fp, LOCK_UN);         //ロックを解除する
0034: fclose($fp);

サンプル・プログラムの解説:アクセス回数の表示

アクセス回数の表示は、ヒアドキュメントを利用する。
space
ここで、ページのキャッシングが行われてしまうとカウンタが増加したのが表示されないので、meta タグにキャッシング禁止指示 no-cache を指定している。

0036: echo <<< EOF
0037: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
0038:  "http://www.w3.org/TR/html4/loose.dtd">
0039: <html lang="ja">
0040: <head>
0041: <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS" />
0042: <meta http-equiv="Cache-control" content="no-cache" />
0043: <meta http-equiv="Pragma" content="no-cache" />
0044: <title>アクセスカウンタ</title>
0045: </head>
0046: <body>
0047: あなたは {$cnt} 人目の訪問者です
0048: </body>
0049: </html>
0050: 
0051: EOF;

参考サイト

参考書籍

(この項おわり)
header