このブログはプログラム開発や学習などの際に役立つ知識や情報を発信するエンジニアのためのトータル技術ブログです。
ご意見やご要望にも積極的に答えていきますので、お気軽にお問い合わせください。

記事へのリクエストはこちら

【Laravel】サイト訪問者を数えるアクセスカウンターのつくり方

Laravel
スポンサーリンク
きつね先生
きつね先生

今日は Laravel を使ってアクセスカウンターをつくってみましょう!

わんぽち
わんぽち

PHP と何が違うんだわん?

きつね先生
きつね先生

Larael では PHP はもちろん使えますし独自の構文を使用して簡単にアプリをつくることができます!

にゃんみ
にゃんみ

Blade 構文ってやつかにゃ?

きつね先生
きつね先生

にゃんみちゃんよく知ってますね!今日は Laravel 独自のBlade 構文や MVC モデルなどの基本を解説しながらアクセスカウンターをつくってみましょう!

こんにちは!あっきーです。

今回は Laravel でのアクセスカウンターの作り方を紹介します。

この記事を読むことで以下のことを習得できます。

・Controller での処理を View テンプレートで表示する流れ
・処理は PHP なので PHP の基本構文
・Laravel を勉強したあとの簡単なアウトプットの指針
スポンサーリンク

Laravel の基本

まず、これから Laravel を始める人のために基本的概念の話を簡単に説明します。

① データベース系の処理を記述する「Model」
② 表示処理を記述する「View」
③ プログラムの処理を記述する「Controller」

Laravel では上記のように役割ごとにコーディングを分割する MVC モデルに基づき設計されています。

今回つくるアクセスカウンターでは「Controller」と「View」の部分を使って処理を記述し「Model」であるアクセス数をカウントするデータ部分は今回はテキストファイルに書き込みを行うといった流れで行っていきます。

 

Laravel のインストール

まずは、Laravel をインストールします。
今回は Laravel を始めた人をメインの対象にしてますので環境構築の話は割愛します。

環境構築からやる人は以前に記事でまとめてますのであわせてご確認ください。

AWS Cloud9 で Laravel を使ってみた。【環境構築】
こんにちは!あっきーです! 近頃はプログラミングもWeb系でしたら、専らフレームワークを使っての開発が主流になってきましたね。 僕もつい先日から PHP のフレームワーク Laravel を始めました。 Web系の企業に興...

AWS での話ですが、ローカル環境でも環境変数少しいじるくらいの違いしかなく基本は同じですので参考にはなるかと思います。

掲示板のアクセスカウンターというシチュエーションでやっていきますので「BBS」という名前の Laravel プロジェクトを作成します。

初期設定

Laravel ではまずどのディレクトリにアクセスした時にどの処理を行うかを定義するルーティングを設定する必要があります。

どの処理を行うという部分が「Controller」で記述したプログラミングです。

ルーティングで設定したプログラミング処理を元に「View」テンプレートでレンダリングを行いブラウザに結果を返します。

今回は使用しませんがこの時に「Model」のデータベースにもアクセスし必要な情報を使用したりします。

たぬきち仙人
たぬきち仙人

プログラムで記述された情報を元に HTML 要素を生成することをレンダリングというのじゃ。

ルーティングの設定

既存ファイル:BBS/routes/web.php

<?php

//コメント部分などは省略してます。
Route::get('BBS', 'PagesController@index');

 

Laravel のインストール時にデフォルトである上記ファイルにルーティング処理を記述します。

https://ドメイン/BBS にアクセス時に「pagesController」ファイルのプログラミング処理を「index.blade.php」ファイルでレンダリングするという処理を定義しています。

Contoroller ファイルの作成

ルーティングで設定した「pagesController」ファイルをコマンドから作成します。

php artisan make:controller BBSController

 

BBS/Http/Controllers/pagesController.php のディレクトリにファイルが生成されます。ここにプログラミング処理を記述していきます。

Viwe テンプレートファイルの作成

「pagesController」でのプログラミング処理を受け取りレンダリングする「View」ファイルを作成します。

以下のディレクトリ配下に「BBS」フォルダを作成し、そのフォルダ内に「index.blade.php」ファイルを作成します。

BBS/resouces/BBS/index.blade.php

 

.blade は Laravel 独自のテンプレートファイルです。

レイアウト内で表示を制御したり、レイアウトを継承して複数を組み合わせたりするための構文が用意されていたり、様々な機能が用意されたファイルです。

Laravel ならではの機能の1つなので、ぜひマスターしたいものです。

カウント処理を記述する

ではプログラミング処理を記述していきましょう。BBS/Http/Controllers/pagesController.php にプログラミング処理を記述していきます。

 

ファイル名:pagesController.php

<?php 
  namespace App\Http\Controllers; 
  use Illuminate\Http\Request; 

  class PagesController extends Controller { 
    public function index($file_name = "counter.txt") { 
      if (file_exists($file_name)) { 

        $handle = fopen($file_name, "r");
        $count = (int)fread($handle, 20) + 1;

        $handle = fopen($file_name, 'w');
        fwrite($handle, $count);

        fclose($handle); 
      } else { 
          $handle = fopen($file_name , "w+"); 

          $count = 1; 
       
          fwrite($handle, $count); 
          fclose($handle); 
       } 

       $data = ['msg'=>'あなたは ' .$count .' 人目の訪問者です。'];
       return view('BBS.index', $data);
    }
  }

 

では、解説していきます。

アクセス数を書き込むファイル作成

if 分を使用し file_exists 関数で「counter.txt」の有無で処理を分岐します。

ファイルが存在する場合は書き込み処理を行い、ない場合は else 以下の処理を実行し、書き込みようのファイルを作成します。

$handle = fopen($file_name , "w+")

 

① fopen の第2引数で記述した “w+” で読み込み、書き出しようにオープンする。

ファイル作成時の初期値の設定

ファイルを作成したら初期値のカウント処理を記述します。

$count = 1; 

fwrite($handle, $count); 
fclose($handle);

 

① fwrite で第1引数の $handle(counter.txt) に第2引数の $count(1) を書き込む。
② fclose でファイルを閉じる。

ファイル読み込み時の処理を記述

file_exists 関数で「counter.txt」が存在した場合の処理を記述していきます。

$handle = fopen($file_name, "r"); 
$count = (int)fread($handle, 20) + 1; 

$handle = fopen($file_name, 'w');
fwrite($handle, $count);

 

① fopen でファイルを読み込む。
② fread で読み込んだファイルにアクセス数の数字を増やす。

fopen の “r” でファイルを読み込み fread でバイナリセーフなファイルの読み込みを行っています。

簡単にいうと fopen でファイル自体を読み込み fread で機械後に変換したファイルを読み込むという風に考えてもらえればいいと思います。

※fread(第1引数, 第2引数)の記述方法

第1引数:ファイルポインタ
⇒読み込んだファイルのファイルポインタの指定
第2引数:length
⇒length で読み込むバイト数を指定。

③ fopen ‘w’ で書き込みモードにする。
④ fwrite で書き込みを行う。

プログラム処理を index.blade.php に渡す

プログラムの処理が終わりましたら「View」テンプレートである「index.blade.php」にデータを渡す処理を記述します。

$data = ['msg'=>'あなたは ' .$count .' 人目の訪問者です。']; 
return view('BBS.index', $data);

 

blade ファイルへの値の受け渡しには view メソッドを使用します。view の呼び出しは以下のように記述します。

return view('テンプレート', 配列);

 

テンプレートはフォルダとファイルは「.」でつなぎ、拡張子の記述はせずファイル名のみで大丈夫です。

「BBS」フォルダの「index.blade.php」に $data の連想配列を受け渡すという処理になっています。

View の処理を記述します

あとは渡された値を表示する記述をするだけです。

Laravel のテンプレートファイルでは {{}} の中に値や変数、関数を記述するだけで表示されます。

<html>
    <head>
        <meta charset="UTF-8">
        <title>アクセスカウンター</title>
    </head>
    <body>
        <h1>アクセスカウンターだよ</h1>
        <p>{{$msg}}</p>
    </body>
</html>

 

表示確認

最後に表示確認しましょう。

サーバを起動します。

php artisan serve --port=8080

 

https://ドメイン/BBS にアクセス

無事表示されました。アクセス毎に数字が増えていきます。
お疲れ様でした。

さいごに

最後まで読んでいただきありがとうございます。

Laravel のアクセスカウンターの記事がなかったので書いてみましたが如何でしたでしょうか。

次回は Model も使用しもう少し本格的なプログラミングの記事を書いて行こうと思いますので引き続きよろしくお願いします。

プログラムの記述に間違いなどありましたらご指摘ください。

スポンサーリンク
あっきー

元キャバクラ店長から未経験でエンジニアに転職した異端児。

「週4の5時間勤務、月収100万円」を実現させ、ゆるりと生きることを目標に日々パソコンと奮闘している。

自分の経験を元に、未経験からでも挫折しないプログラミングの勉強方法や最新技術や情報などを発信していきます。

あっきーをフォローする
LaravelPHP
\良い記事だったらシェアしてね!/
スポンサーリンク
駆け出しエンジニアのつぶやき