ITスキルを身に付けながら過ごした2021年。締めくくりはアクセスカウンター作り。

 インターネット黎明期のホームページ(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スキルを身に付けることになりそうです。来年こそは、もっと目に見える形で前進したいです。

 それでは、みなさんよいお年を。

にほんブログ村 ゲームブログへ

スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする