ディレクトリごとに異なるバージョンのPHPを使用する方法

はじめに

こんにちは、omkです。
今回はPHP-FPMでディレクトリごとに異なるバージョンのPHPを使用できる方法を調べたので共有します。

前提

CentOS7.8の端末にApache2.4.6と、PHP5.4.16とPHP7.3.18のCGIが入っています。
バーチャルホストごとの設定でphp5.4のCGIとソケット通信を行っていましたところ、同一のバーチャルホスト内で特定のディレクトリのみPHP7.3を使用する必要性が出てきたのでこれに取り組みました。

ドキュメントルート=/var/www/Documentroot
対象のディレクトリ=/var/www/Documentroot/php73
として読んでください。

結論

php7.3を使用したいディレクトリに.htaccessに置いてそこだけ通信を分けることで対応しました。

バーチャルホストのconf
/etc/httpd/conf.d/virtualhost.conf

<FilesMatch \.php$>
  SetHandler "proxy:unix:/run/php-fpm/host1.sock|fcgi://localhost"
</FilesMatch>

php5.4のFPMのconf
/etc/php-fpm.d/host1.conf

listen = /run/php-fpm/host1.sock
listen.allowed_clients = 127.0.0.1

対象ディレクトリの.htaccess
/var/www/Documentroot/php73/.htaccess

<FilesMatch \.php$>
SetHandler "proxy:unix:/run/php73-php-fpm/host1.sock|fcgi://localhost"
</FilesMatch>

php7.3のFPMのconf
/etc/opt/remi/php73/php-fpm.d/host1.conf

listen = /run/php73-php-fpm/host1.sock
listen.allowed_clients = 127.0.0.1

php7.3のソケット通信用にディレクトリを作ります。

# mkdir /run/php73-php-fpm

端末を再起動することでソケットファイルが作成されて使用可能となるでしょう。
再起動した際に作成したソケット通信のディレクトリが消える場合はこちらが参考になると思います(Nginexの記事ですが同じようにUIDとGIDをapacheにしておけば良いです)。
https://qiita.com/centipede/items/3a54aa692eecc03116cb

まとめ

/php73配下のphpファイルは/php73/.htaccessの記述に沿ってphp7.3で実行されます。

<?php phpinfo(); ?>

で確かめましょう。

ソケット通信が上手くいかない場合はディレクトリの有無や、サービスがアクティブか確認してみてください。端末の再起動も有効です。
.htaccessを使用する際はAllowOverrideの設定にご注意ください~。

以上となります。ありがとうございました。

返信を残す

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

CAPTCHA