現在サイトを見ている人の人数を数えたいという要求がありました。
HTTPは基本的に状態を持たないステートレスなものなので、厳密に言えばアクセス中の人数をカウントすることは不可能です。そこで(かなり曖昧ですが)、セッションが有効であればアクセス中とすることにします。
PHPにおけるセッションはデフォルトではファイルに保存されています(session.save_handlerで変更可能です)。1セッションにつき1ファイルになり、無効なセッションは削除されていきます。そこでセッションファイルが保存されているディレクトリにあるファイルの数をアクセス中の人数とすることとしました。ただし、同一サーバ上の他のサイトでもPHPを動かしていてセッションを使っている場合、そのままではセッションファイルが保存されるディレクトリも共通になります。そこでセッションを開始する前に、対象のサイト独自でセッションファイルを保存するディレクトリを指定します。スクリプト内で指定するには、以下のようにsession_save_path関数を使用します。これはsession_start関数の前に呼び出す必要があります。
(例)
session_save_path("session_dir");
session_start();
セッションファイルをカウントするコードは以下のようになります。
(例)
function getActiveCount() {
$path = session_save_path();
if (empty($path)) {
return 0;
}
$files = glob("$path/sess_*");
if ($files === false) {
return 0;
}
return count($files);
}
できるだけ厳密に人数を数えたい場合は、セッションファイルの削除タイミングを調節する必要があります。これは、設定ファイルの以下の項目に該当します。
session.gc_divisor
session.gc_maxlifetime
session.cache_expire
参考:
PHPマニュアル CXXXVII. セッション処理関数(session)