単一ページ用の簡単なアクセスカウンターを作成しました。
これを拡張して、複数ページに対応してみます。
ここで考えられる方法は、カウント値を保存するファイルをページごとに作成する方法と
ひとつのファイルにページを区別するキーを設定して管理する方法があります。
今回は、1ページ1ファイルとし1ページごとにファイルを対応させます。
次にページとファイルをどうやって対応させるかということを考えます。
ここでは、2つの方法を提案します。
$_SERVER変数を使ってファイルのパス及びファイル名を取得します。このパスを使って
カウント値を保存するファイル名にする方法です。
<?php
$cntfile = str_replace("/","_",$_SERVER['PHP_SELF']) . ".dat";
?>
$_SERVER['PHP_SELF']は、スクリプトを実行しているファイルのドキュメントルートからの
パスを返します。この方法で一意性を確保できます。しかし、パスとして使えない文字があるため
str_replace()関数を使って置き換えます。
次に、GETメソッドを使ってあらかじめ設定したキー(ID)を使います。
この場合、IDは個々に管理する必要がでてきます。
<?php $cntfile = $_GET['ID'] . ".dat"; ?>
ここまでで、複数ページのカウント処理が作成できるようになりました。
<?php
$cntdir = "count/";
$cntfile = str_replace("/","_",$_SERVER['PHP_SELF']) . ".dat";
$countfile = $cntdir . $cntfile;
//ファイルが存在しない場合、新規作成
if (!file_exists($countfile)) {
$fp = @fopen($countfile, "w");
if (!$fp) {
return;
}
fclose($fp);
}
//カウント処理
$fp = @fopen($countfile,"r+");
$cnt = fgets($fp);
//カウントアップ
$cnt = $cnt + 1;
ftruncate($fp,0);
rewind($fp);
fputs($fp, $cnt);
fclose($fp);
print $cnt;
?>
Copyright 1997-2008 BBB All rights reserved.