🐘
PHPでWebサイトのアクセスカウンタを作った
PHPで、Webサイトのアクセスカウンタを作成しました。
カウント数は、PHP経由でdatファイルに保存するプログラムです。
datファイルのパスを指定することで、簡単にアクセスカウンタが設置できます。
プログラムの概要
このプログラムは以下のような機能を持っています。
- カウント数をdatファイルに保存する。
- クッキーを利用して、一定期間内の再訪問を検知する。
- ファイルロックを利用して、同時アクセスによるカウントの競合を防止する。
プログラムのコード
以下が、アクセスカウンタのPHPコードです。
<?php
// カウント数が記録されているファイルのパス
$file_path = 'count.dat';
// クッキーの名前
$cookie_name = 'page_viewed';
// クッキーの有効期限(秒)
$cookie_duration = 3600; // = 1時間
// カウントを保存するファイルが存在しない場合は作成
if (!file_exists($file_path)) {
file_put_contents($file_path, '0');
}
// ファイルを排他ロックで開く
$fp = fopen($file_path, 'r+b');
// ファイルのロックに成功した場合のみ処理を続行
if ($fp !== false) {
// ロックを取得
if (flock($fp, LOCK_EX)) {
// ファイルからカウント数を取得
$count = (int)fgets($fp);
// クッキーが設定されていない場合のみカウントを増やす
if (!isset($_COOKIE[$cookie_name])) {
// カウントをインクリメント
$count++;
// ファイルのポインタを先頭に戻してカウント数を書き込む
rewind($fp);
fwrite($fp, (string)$count);
// クッキーを設定
setcookie($cookie_name, '1', time() + $cookie_duration);
}
// ロックを解放
flock($fp, LOCK_UN);
}
// ファイルを閉じる
fclose($fp);
}
?>
<p>あなたは<?php echo $count; ?>人目の来訪者です。</p>
プログラムの詳細説明
ファイルの初期化
まず、カウント数を保存するためのファイルcount.datが存在しない場合に新しく作成するようにします。初期値は0に設定します。
if (!file_exists($file_path)) {
file_put_contents($file_path, '0');
}
ファイルの排他ロック
次に、count.datファイルを排他ロックで開きます。複数の訪問者が同時にアクセスした場合に、データの競合を防ぐための処理です。
$fp = fopen($file_path, 'r+b');
if ($fp !== false) {
if (flock($fp, LOCK_EX)) {
カウントの更新
ファイルから現在のカウント数を取得し、クッキーが設定されていない場合に、カウントをインクリメントします。そして、カウント数をファイルに書き戻します。
$count = (int)fgets($fp);
if (!isset($_COOKIE[$cookie_name])) {
$count++;
rewind($fp);
fwrite($fp, (string)$count);
setcookie($cookie_name, '1', time() + $cookie_duration);
}
結果の表示
最後に、HTMLで表示します。
?>
<p>あなたは<?php echo $count; ?>人目の来訪者です。</p>
アクセスカウンタ
作ったアクセスカウンタです。
アクセスカウンタ
まとめ
訪問者数を正確にカウントするために、ファイルの排他ロックやクッキーを活用しました。
シンプルな実装ですが、趣味でのちょっとしたアクセスカウンタとして、簡単に設置できます。
Discussion