先日テキストファイルへの書き込みをやったので、本日はそれを利用してアクセスカウンタを作りました。
スクリプトの流れとしては、
現在時間を取得、クッキーに保存→カウントする数字を保存するファイルを作成→ファイルを開き、クッキーに保存した時間と現在時が異なっていればカウント数をひとつ上げる→ファイルを閉じる→6桁で表示する
●setcookie (クッキー名, クッキー値, 有効期限);
クッキー名: 送信するクッキーの任意の名前
クッキー値: クッキーに含まれる値
有効期限 : 任意のクッキー保持期限を UNIX時で設定
●printf(フォーマットを示した変数, 変数)
ここで使っている "%06d" は、『6桁で表示し、足りない桁は0を表示』という意味。
詳しくはマニュアルをご覧ください
printf();
ソースはこちら↓
<?php
// 日付けの取得
$date_now = date( "Y/m/d" );
$cookie = $date_now;
// クッキーに日付けをセット
setcookie ( "$Cookie", $cookie );
?>
<html>
<head><title>カウント</title></head>
<body>
<p>あなたは
<?php
// データファイルを設定
$data_file = './count/access.dat';
// ファイルを書き込みモードで開く
$fp = fopen( "$data_file", "r+" );
$count = fgets( $fp, 64 );
// クッキーに保存されている日付とアクセスした時点での日付が違っていればカウントアップ。これで更新ボタンを押してもカウント数は上がりません。
// クッキーで保存されている日付とアクセスした日付が異なれば
if ( $Cookie != $date_now ){
// カウントに1増やす
$count++;
// ファイルポインタを0バイト目(ファイルの先頭)に戻して
fseek ( $fp, 0 );
// ファイルに書き込みを行うので排他ロックをかける
flock ( $fp, LOCK_EX );
// ファイルに書き込む
fwrite ( $fp, $count );
}
// ファイルを閉じて
fclose ( $fp );
// $countを6桁で表示する。桁数が満たない場合は0で埋める。
printf ( "%06d", $count );
?>
番目のお客様です。</p>
<p>クッキー機能を使った正確なカウンターです。更新ボタンを押してもカウントアップしません。</p>
</body>
</html>
サンプル画面はこちら