スクリプト複数ページへの対応($_GET,$_SERVER['PHP_SELF'])

メモ:  Category:php

単一ページ用の簡単なアクセスカウンターを作成しましたので、これを拡張して、複数ページに対応してみます。

ここで考えられる方法は、カウント値を保存するファイルをページごとに作成する方法と、ひとつのファイルにページを区別するキーを設定して管理する方法があります。

今回は 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;
?>

bluenote by BBB