PHPでアクセスカウンターを作りたい!第一回~まずはカウントアップから!~
初の(不定期)連載記事です!!
車輪の再発明みたいな感じにはなりますが、アクセスカウンターを作って行きたいと思います。
何でアクセスカウンターなのって、理由としてはシンプルだけど実際に自分で作ったことがなかったからです。
アクセスカウンターと一言に言っても種類も実装方法を結構色んな種類がありますね。
最も単純なのは「ページをロードしたらアクセス数をインクリメントする」というものです。
逆に複雑なものを作ろうとすると、「アクセス情報をデータベースに保存して、あとで統計データが取れるような”システム”」になってしまいます。
どんなものをどう作るのかは用途次第ですが、色々作って行きたいと思います。
(連載的なの初めてなので全何回になるか分かりませんが、どうぞお付き合いお願い致します)
第一回 ~まずはカウントアップから!~
まずは最もシンプルなカウンターから。
リロードのたびにカウントアップします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
<?php //ファイルを開く(wにすると消えて読めなくなるのでr+で) $file = './count.dat'; $fp = fopen($file, 'r+'); if(!$fp){ die('Error!'); } //ファイルから読み込み $count = fgets($fp); //中身が空だったり、不正な値は弾く if(empty($count) || !is_numeric($count)){ die('Error!'); } //カウントアップ $count++; //ファイルポインタを先頭に戻す rewind($fp); //ファイル書き込み fputs($fp, $count); //ファイルを閉じる fclose($fp); //カウンター表示 echo($count); ?> |
これで最もシンプルなカウンターの完成です。
とりあえず使いやすいように関数化。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
<?php //カウンター呼び出し $count = counter(); //エラーチェック if($count === false){ printf("Error!!"); } else{ echo sprintf("Counter : %d", $count); } function counter(){ //ファイルを開く(wにすると消えて読めなくなるのでr+で) $file = './count.dat'; $fp = fopen($file, 'r+'); if(!$fp){ return(false); } //ファイルから読み込み $count = fgets($fp); //中身が空だったり、不正な値は弾く if(empty($count) || !is_numeric($count)){ return(false); } //カウントアップ $count++; //ファイルポインタを先頭に戻す rewind($fp); //ファイル書き込み fputs($fp, $count); //ファイルを閉じる fclose($fp); return($count); } ?> |
この程度だと関数化の恩恵はあまりない気もしますが、メインロジックの部分は読みやすくなりますね。
ちなみに、「===」でfalseと比較しているのは型まで厳密に比較する必要があるからです。
PHPでは様々な値がFALSEと同義に扱われてしまうので、本当にFALSEかを知りたい場合は「===」を使う必要があります。
(例えば、false == 0は真である、false == nullも真である)
また、表示部ではsprintfを用いていますが、こちらも少し注意が必要です。
数値の出力に%dを用いていますが、これは将来的には少し不安なコードです。
プログラマの方々はもうご存知かと思いますが、取りうる値によっては%dの範囲を超えてしまう場合があるからです。
%dによりint型に変換されて表示されますが、取れる値の上限は2147483647です。
(設定や環境によっても異なりますが、PHPがIntegerで精度が保証してくれるのはは8桁程度だと聞いたことがあります)
将来的には修正すべきコードですが、今回はひとまず置いておきましょう。
もう一点、カウンターの情報が入っているファイル(count.dat)のパーミッションは正しく設定しましょう。
777とかにして不正な改変が行われても文句は言えません。
多くの場合755などで設定しますが、環境によってPHPを実行するユーザーも違うと思いますので各自で設定しましょう。
そんな細かい話は置いといて(そんなこと言うからPHPerが馬鹿にされるのかもしれない)、
これで最も簡単なアクセスカウンターができました。
さて、今回はこんなところですね。
次回は「リロード対策」を行っていきたいと思います。
今回のコードに数行足すだけでできますので、比較的簡単にできると思います。
いつになるかは分かりませんが、頑張って記事書きますのでよろしくお願い致します!
ではでは。
Tak
2016年9月16日 - 12:10 PM
参考にさせていただきました