10年以上前に流行っていたらしいアクセスカウンター。
今はGoogleAnaliticsなどでかなり詳細にアクセス数を取得できるので、めっきりみなくなっていましたが、最近自作する機会があったので、メモします。
・今回は、ページを表示されるたびにカウント(PV)
・アクセスされる度に、アクセス数が書いてあるファイルを開き、その数字に+1して上書きしていく。
・そのファイルに書いてある数字を取得して、サイト上に表示する。
・毎月1日になったら、cronで上記ファイルを先月用のファイルに名前変更する。
・先月のアクセス数は、先月用ファイルから取得する。
・cronで今月用のファイルを作成し、0を書き込むことで、また1からカウントする。
①今月のアクセス数を保存するcounter.datを作成し、「0」を記述。任意のディレクトリに配置。
②先月用のアクセス数を記述したファイル、例えば「counter202012.dat」を用意し同じディレクトリに配置
カウントを行いたいページに、以下を記述する。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
$filename = '/home/⋇⋇⋇/www/counter/counter.dat'; //今月のアクセス数を記述するファイル $filePath = '/home/⋇⋇⋇/www/counter/'; //ファイルが置いてあるディレクトリ //先月用ファイル $lastMonth = date('Ym', strtotime(date('Y-m-1') . '-1 month')); //「先月」を取得 例) 202012 $Lastfilename = 'counter'.$lastMonth.'.dat'; //先月のファイル // 例) counter201212.dat //訪問時のアクセスを取得 $fp = fopen($filename,'r+'); $count = fgets($fp,32); $count = $count+1; // ファイルに記述されている数値に+1にしたものが現在のアクセス数 fseek($fp, 0); fputs($fp, $count); //現在のアクセス数をファイルに上書き flock($fp, LOCK_UN); fclose($fp); $thisNumber = number_format($count); //千の位ごとに「,」を付けてフォーマット化 //先月のアクセスを取得 $lastMonthCnt = file_get_contents($filePath.$Lastfilename); //先月用のファイルに書いてある数字を取得 $lastNumber = number_format($lastMonthCnt); //千の位ごとに「,」を付けてフォーマット化 ?> |
アクセスカウンターを表示したい場所に、出力。
1 2 3 4 |
<div> <span>Access counter</span> <br>今月: <? echo $thisNumber; ?> / 先月 <? echo $lastNumber; ?> </div> |
ここまででアクセスカウンターは動くようになります。
ただ、月が替わるごとに、アクセス数が記述されたファイル(counter.dat)が自動で更新されてほしいので、ここからはcronを使います。
例えば今月が1月だとする場合、2月に変わった時に、counter.datに保存されていた値をcounter202101.datとして先月用のファイルにリネームし、今月用のcounter.datの値を0にしたいです。
そこで、上記の処理を行うためにcronに登録するための処理をphpで記述します。
exec_counter.phpと記載しましたが、ファイル名はなんでも大丈夫です!
1 2 3 4 5 6 7 8 9 10 11 |
<?php $filename = '/home/⋇⋇⋇/www/counter/counter.dat'; //今月のアクセス数を記述するファイル $filePath = '/home/⋇⋇⋇/www/counter/'; //ファイルが置いてあるディレクトリ //先月用ファイル $lastMonth = date('Ym', strtotime(date('Y-m-1') . '-1 month')); //「先月」を取得 例) 202012 $Lastfilename = 'counter'.$lastMonth.'.dat'; //先月のファイル // 例) counter201212.dat rename($filename, $filePath.$Lastfilename); //現在のcounter.datを先月の日付付きに名前変更 //新しいconter.datファイルを作成し、0を記述 file_put_contents($filename, '0'); |
こちらの記事にさくらサーバでのやり方を記載しています。
毎月1日に、先月分のcounter.datが日付付きにリネームされ、新しいcounter.datが生成されていることも確認できました!
Miki Kohinata
大学時代、将来独立することを決めエンジニアの道へ。就職したIT企業で藤本と運命的に出会いKOHIMOTO設立。目指すのは人の心に寄り添えるエンジニア。人生のテーマソングはWeekend by 5lack。
INDEX
PICK UP