VirtualminでPHPを複数インストールと、ディレクトリごとにPHPバージョンを変えるの巻

Date:

Share post:

今回の環境です。

    • OS:Almalinux
    • PHP:PHP-FPM(元々入っていたバージョンは7.3)
    • Virtualminで仮想ホストを使用

以下の要件がありました。

  • ドキュメントルート直下にサブディレクトリを作成
  • サブディレクトリについては異なるバージョンのPHPを実行したい(AというCMSはPHP7.3でないと動作しないがBというCMSは可能であれば最新のPHPで実行させたい、のようなケースです。)

CGIの場合は、Virtualminではサブディレクトリ単位に実行するPHPのバージョンが選択可能でしたが、PHP-FPMの場合はそれができません・・・。

【画像参考】※CGIだとサブディレクトリごとにPHPバージョンが選択できます。

どうしたらいいものかと思っていたところ、有識者の方からご助言を頂き、どうも.htaccessで切り替え可能との事。

ローカル環境で試してみました。

1)異なるバージョンのPHPのインストール

先程書いたように、元々入っていたPHPのバージョンは7.3だったのですが、8.0と8.1を入れてみます。SSHでログインして、コマンドを実行してインストールを行います。

remiリポジトリが入っていない場合はインストールとキャッシュクリアを実行します。

. /etc/os-release && dnf -y install https://rpms.remirepo.net/enterprise/remi-release-$(rpm -E %$ID).rpm && dnf clean all

PHPをインストールします。

dnf install php81-php-{cli,fpm,pdo,gd,mbstring,mysqlnd,opcache,curl,xml,zip}

phpXXのXXはバージョン、{}で必要なモジュールを入れます。

ここでWebminのサーバステータスを確認します。

それぞれのPHP-FPMサーバが実行されています。また、Virtualminのサーバ設定 > PHPオプション画面でもインストールした複数のバージョンが選択可能な状態になっています。

2)ディレクトリごとのPHPバージョンを変更する

今回の場合、以下のようにしようとしています。

document root ← 元々のPHPバージョン
  |
   ー directory A ← 元々のPHPバージョン
  |
   ー directory B ← 異なるPHPバージョン(PHP8.0にします。)

PHPバージョンごとに異なるソケットが使用されるので、特定のディレクトリについて、.htaccessで特定のPHPバージョンのソケット通信を許可するようにさせる方法になります。

まずはソケットの場所を確認します。

cd /etc/opt/remi/php80/
view www.conf

そうすると

listen = /var/opt/remi/php80/run/php-fpm/www.sock

ここにソケットのファイルが存在することが確認できましたので、次に、directory Bに .htaccess を設置します。

.htaccess は以下の内容です。

<FilesMatch \.(php|phar|html)>
SetHandler "proxy:unix:/var/opt/remi/php80/run/php-fpm/www.sock|fcgi://localhost
</FilesMatch>

先程確認したソケットを使用するように記述しています。

設置後に、directory Bでphpinfo()を表示させてみます。

PHP8.0ですね!

よかったよかった〜。

Related articles

Laravel Filamentを使用した管理画面...

前回Breezeをインストールしたこと...

Laravel Filamentを使用した管理画面...

前回、filamentでのリソース作成...

Laravel Filamentを使用した管理画面...

前回、Filamentをインストールし...