インターネット黎明期のホームページ(Webサイト)には、サイトへのアクセス数を計測するためにアクセスカウンターがあちこちで見られました。
少し前にPHPで外部ファイルの読み書きが可能になったことで、ようやく自分でアクセスカウンターを作れるようになりました。
アクセスカウンターの処理の流れ。
アクセスカウンターの処理の流れは次のようになります。
アクセスカウンターが設置されているページにアクセスがあると、アクセスカンターのプログラムが呼び出されます。
プログラムが呼び出されると、アクセス数が記録されている外部ファイルから数値データが読み込まれ、この数値データに+1する処理が行われます。そして、+1した結果を表示するとともに、外部ファイルに書き込んでファイルの内容を更新します。
これによって、ページへのアクセスが発生するたびに外部ファイルの数値が+1づつ更新され、ページへのアクセス数をカウントすることが可能になります。
アクセスカウンターのコードは次のようになりました。
<?php
//外部ファイルに記録されている数値データを読み込む。
$file = fopen('data.txt', 'r+');
flock($file, LOCK_EX); //ファイルをロックして、ファイル処理中の他のアクセスを防止。
$num = (int)trim(fgets($file));
//外部ファイルから読み込んだ数値データに+1する。
$num++;
//カウンターの内容を表示。
echo $num."回アクセスされました"."\n";
//数値データを、外部ファイルに書き込んで更新する。
rewind($file); //書込み位置をファイルの最初に持ってくる。
fwrite($file, $num);
flock($file, LOCK_UN); //書き込みが終わったら、ファイルのロックを解除。
fclose($file);
?>
Xamppを起動した状態でアクセスカウンターを動かした結果です。再読み込みを繰り返すたびに、カンターの数字が増えていきます。
これではシンプル過ぎて味気ないので、各桁の数字を画像で表示できるように改造しました。
入力された数値を桁別に分解して配列に入れ、その配列の内容に対応した画像ファイルを表示するHTML文字列を返す関数を追加しています。今回は5桁の数値を画像で表示します。
数字を画像表示するタイプのアクセスカウンターのコードはこちらです。
<?php
//数値を画像表示用HTML文字列に変換して返す
function numDisp($numData){
$numArr = str_split(str_pad($numData, 5, 0, STR_PAD_LEFT));
$dispStr = "";
foreach ($numArr as $v){
$dispStr = $dispStr."<img src = 'img/".$v.".png'>";
}
return $dispStr;
}
//外部ファイルに記録されている数値データを読み込む。
$file = fopen('data.txt', 'r+');
flock($file, LOCK_EX); //ファイルをロックして、ファイル処理中の他のアクセスを防止。
$num = (int)trim(fgets($file));
//外部ファイルから読み込んだ数値データに+1する。
$num++;
//カウンターの内容を表示。
echo numDisp($num)."回アクセスされました"."\n";
//数値データを、外部ファイルに書き込んで更新する。
rewind($file); //書込み位置をファイルの最初に持ってくる。
fwrite($file, $num);
flock($file, LOCK_UN); //書き込みが終わったら、ファイルのロックを解除。
fclose($file);
?>
再読み込みを繰り返すことで、画像で表示された数字が増えていきます。
デジタル数字素材提供:ぬれよん様。
これで、一応はアクセスカウンターの形にはなったと思います。実際にアクセスカウンターをブログなどに置いて運用するためには、同一IPアドレスからのアクセスを一定時間カウントから外したり、セキュリティ面の設定などが必要になってきます。この辺は今後の課題になります。
ITスキルを身に付けながら過ごした2021年を振り返る。
2021年も残すところ今日1日。2021年は、PHPでアクセスカウンターを作って締めくくりとなりました。
昨年に続いて、2021年もITスキルを身に付けることを目標にして1年間過ごしてきました。この1年間で達成できたことは、次のようになります。
・他の機器に画面を出力する。
・マシンの過熱を解決できたことで、今のマシンでPSO2や原神を長時間動かせるようになった。
・Chromecastを用いて、モバイル機器の画面を雑音なしで録画。これでゲームアプリの攻略動画も撮影できる。
・クラウド技術の習得。Azure Fundamentals(AZ-900)試験に合格。
・Xamppの導入により、ローカルPCでWordpressを動かしたり、PHPの動作確認(外部ファイルの読み書きを含む)が可能になった。
・PHPでアクセスカウンターのプログラムを作成。
他には、ソフトウェア開発技術者試験(現応用情報技術者試験)の午後問題を解いた上で自分の言葉で解説したりしてました。出題されたテーマは、待ち受けから通話終了までの携帯電話の状態遷移、自動販売機の処理の流れ、ウィルスへの対応、タイムスタンプ、プロキシサーバを用いたシングルサインオン、VLANなどがありました。単語や文章で解答形式の問題が登場するため、かなりきつい。
こんな感じでITスキルを身に付けようとした2021年でしたが、私としては前に進んでいるのかどうか微妙な所です。
来年も引き続きITスキルを身に付けることになりそうです。来年こそは、もっと目に見える形で前進したいです。
それでは、みなさんよいお年を。