【PHP入門】プレーンなPHPでブログを作成する・その1【環境構築編】

1.目的

Laravelを使ったWebアプリ構築は経験があるが、プレーンなPHPを触ったことが実は無いことに気づいた。というのも、以前先輩エンジニアの方から「困ったときに自分で作るスキルがあった方が何かと役に立つ」と言われたのを思い出したのだ。

特に最近のフレームワークはよく出来ていて、ドキュメントさえ読めばプログラムを理解せずともアプリが作れてしまう。そこで、フレームワークに頼らずにプレーンなPHPでブログを作成してみることにした。

2.工夫した点

プレーンとは言っても、直書きして動けばいいというものでもない。Laravelでの経験を活かしていくつか工夫してプログラムを組むことにする。

2-1.ビュー

ビューはページ毎にテンプレートとして作成し、後述のルーティング時にパスに対応したビューを表示する。

2-2.モデル

扱うデータにはユーザとブログが存在するので、モデルとして定義しておき、DBとのやりとりはこちらで処理する。ビューとDBを分離するため。

2-3.ルーティング

ライブラリなしでルーティングを自作する。といってもパスを解析して対応したビューを返すのみ。

2-4.認証

PHP標準のメソッドを使い、Cookieを使った認証を行う。

3.環境構築

使用したミドルウェア等は下記表の通り。

PHP7.4
Apache2.4
MySQL5.7
Bulma8.0
GitBook3.2.3
使用したミドルウェア等

さくっと構築するためにphp-apacheとmysqlのイメージを使う。Dockerだけで良かった気もするが、既存イメージの組み合わせで楽に組めたのでDockerComposeを使用。

docker-compose.ymlは下記の通り。

version: '3'
services: 
    web:
        build: docker/php
        ports:
            - "8000:80"
        volumes:
            - ./:/var/www/html
    mysql:
        image: "mysql:5.7"
        ports:
            - "3306:3306"
        environment:
            MYSQL_DATABASE: php_blog
            MYSQL_ROOT_PASSWORD: hoge
            MYSQL_USER: fuge
            MYSQL_PASSWORD: fuge

特筆するとしたら、portsでホストとゲスト間のポートフォワードしていることくらい。

php-apacheはライブラリのインストール等を行いたいので別途Dockerfileを作成する。

FROM php:7.4-apache

COPY 000-default.conf /etc/apache2/sites-available/000-default.conf

RUN apt-get update && \
  apt-get install -y libonig-dev && \
  docker-php-ext-install pdo_mysql mysqli && \
  a2enmod rewrite

Apacheの設定を変更したいので3行目を記述し、後ほどファイルを作成する。

あとは、libonig-dev(正規表現を扱うライブラリ)とmysqlとの連携に必要なライブラリをインストール。

ルーティングの際に「/index.php/create」となるのはかっこ悪いので、a2enmodでApacheでのパスの書き換えをオンにしておく。

defalut.confは下記の通り。

<VirtualHost *:80>
    DocumentRoot /var/www/html/public/

    <Directory /var/www/html/public>
        Options -Indexes FollowSymLinks MultiViews
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

DocumentRootを設定し、AllowOverrideをAllにしてパスの書き換えを許可する。

Optionsディレクティブの設定について、

Indexesファイル一覧を表示させるオプション。セキュリティ的によろしくないのでオフにする。
FollowSymLinksシンボリックリンクをたどれるようにするかどうか。
Multivews多言語対応されたサイトで適切な言語を返すときなどに使われる。あとで考えると必要ないオプションだった気がする…。
Optionsディレクティブの設定

Require all grantedを設定し、全てのアクセスを許可しておく。

ちなみにアクセス許可の記述はApache2.4のもので、それ以前は書き方が違ったらしいので注意。

最後にパスの書き換えを行うために、index.phpと同じディレクトリに.htaccessを記述する。

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} (.+)/$
RewriteRule ^ %1 [L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]

1行目でRewriteモードをオンにする。中段3行は与えられたパスがディレクトリでなければスラッシュを取ったパスを渡す設定である。下段3行はディレクトリでなくファイルでもないときにindex.phpを返す設定をしている。

4.まとめ

今回は手始めとして環境構築を行った。少々面倒にも感じるが、このくらいの環境構築はできて損はないと思う。次回はルーティングとビューの作成を行う。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA