PHP自体はWebサーバーのセットアップ時にインストールしていて、それを使ってphpMyAdminやら、Piwigoやらを既にセットアップしているわけだが、このサーバーは開発用の実験サーバーとして使うので、PHPも複数バージョン使いたい。
Dockerという手もあるのだが、少々勉強に時間も掛かりそうなので、複数バージョンをインストールして切り替える方法を探す。
なんでも、yumで複数バージョンをインストールする方法があるようで、Remi’s Repositoryからだと、5.4以降の各マイナーバージョンの最新版がインストールできるらしい。
Qitaで手順を公開している方がいるので、参考にさせてもらう。
(参考)Yum で複数バージョンの PHP を共存させる
1.リポジトリの追加
まずは、yumでインストールするためのリポジトリを追加する。ここではRemi’s Repositoryを使う。
$ sudo yum install http://rpms.famillecollet.com/enterprise/remi-release-7.rpm #remiリポジトリのインストール
$ sudo yum-config-manager --enable remi #remiリポジトリの有効化
2.各バージョンのPHPインストール
リポジトリが追加できたら、PHPをインストールしていく。ポイントは”php”というキーワードの後ろにバージョン番号の数字をつけるところ。
普通にインストールするときは、”yum -y install php”とするところを、”yum -y install php55″とすると、PHP5.5系の最新がインストールできる様になっているようだ。
参考サイトでは、for文を使って、まとめてインストールしているので、その方法を使わせていただく。
for v in 54 55 56 70 71 ; do sudo yum -y install php$v php$v-php-{gd,xml,mbstring,mysqlnd} ; done
for v in 54 55 ; do sudo yum -y install php$v-php-pecl-{apc,memcached} ; done
for v in 56 70 71 ; do sudo yum -y install php$v-php-{opcache,pecl-apcu,pecl-memcached} ; done
下2行はAPC(Alternative PHP Cache)という、PHPの実行コードをキャッシュして高速化するための仕組み。PHP5.5までとPHP5.6以降でyumのパッケージ名称が変わっているため、別個に記述してある。
インストールできたら、”php.ini”の場所を確認しておく。
$ for v in 54 55 56 70 71 ; do php$v --ini | grep Loaded | awk '{print $4}' ; done
/opt/remi/php54/root/etc/php.ini
/opt/remi/php55/root/etc/php.ini
/opt/remi/php56/root/etc/php.ini
/etc/opt/remi/php70/php.ini
/etc/opt/remi/php71/php.ini
3.URLでバージョンを切り替える
apacheの設定だけで切り替えられるかと思いきや、php-fpm(FastCGI Process Manager)というパッケージもいるらしい。
これも、remiリポジトリから入手する。
php-fpmのインストールと設定
$ for v in 54 55 56 70 71 ; do sudo yum -y install php$v-php-fpm ; done
#プロセスマネージャーの設定
$ for v in 54 55 56 ; do sudo sed -i '/pm = /s/dynamic/ondemand/' /opt/remi/php$v/root/etc/php-fpm.d/www.conf ; done
$ for v in 70 71 ; do sudo sed -i '/pm = /s/dynamic/ondemand/' /etc/opt/remi/php$v/php-fpm.d/www.conf ; done
#バージョンごとにlistenポートの設定。(9000番代を使用)
$ for v in 54 55 56 ; do sudo sed -i "s/9000/90$v/" /opt/remi/php$v/root/etc/php-fpm.d/www.conf ; done
$ for v in 70 71 ; do sudo sed -i "s/9000/90$v/" /etc/opt/remi/php$v/php-fpm.d/www.conf ; done
#php-fpmの起動とデーモン化
$ for v in 54 55 56 70 71 ; do sudo systemctl start php$v-php-fpm ; sudo systemctl enable php$v-php-fpm ; done
ディレクトリごとのPHP切替の設定
方法は色々あるようで、ホスト名でPHPのバージョンを切り替えたい場合は、参考サイトの記述を参照。
ただ、これだとクライアントPCのHostsファイルも書き換えにゃならんので、個人的には面倒。
基本は標準リポジトリからインストールしたPHPを使い、ディレクトリごとにバージョンを切り替えるなら、対象ディレクトリに.htaccessファイルを作成し、以下の記述を行えばOK。
<FilesMatch \.php$>
SetHandler "proxy:fcgi://127.0.0.1:9071" #ポート番号で使用したいPHPのバージョンを記述
</FilesMatch>
ただ、この方法もディレクトリごとに.htaccessが必要になるので、面倒は面倒。
どちらがいいかは、用途や好み次第か。

コメント