単一ページ用の簡単なアクセスカウンターを作成しました。
これを拡張して、複数ページに対応してみます。
ここで考えられる方法は、カウント値を保存するファイルをページごとに作成する方法と
ひとつのファイルにページを区別するキーを設定して管理する方法があります。
今回は、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-2010 BBB All rights reserved.