yumでCentOSに標準以外のPHP実行環境を構築する
CentOSの標準リポジトリのみに依存していると、PHPのバージョンがどんどんEOLになっていって悲しいので、yumで任意のバージョンをインストールして使用するための手順のメモ。
ちなみに、標準リポジトリを使用する場合はCentOS 6ではPHP 5.3.3、CentOS 7ではPHP 5.4.16ですが、CentOS 8では一気にPHP 7.2.11まで飛びます。
Remiプロジェクト
『RedHat系LinuxにPHPの最新版を提供することをミッションとする』だそうです。
- Remi's RPM repository
ちなみに、多くの記事で「rpms.famillecollet.com」からインストールする例を見ましたが、2020年6月15日現在、ここではミラーされていないようで、本家へのリダイレクトになっています。
Remiリポジトリの追加
上記のサイトでミラーサイトを確認し、適当なところから選び出します。日本では「http://ftp.riken.jp/Linux/remi/」が提供されているので、今回はそこを利用します。
まず、EPELが必要となるので、その追加から。
CentOS 6 (今さらですが)
- 以下のページを見る
- 「epel-release-xxx.noarch」のリンク先URLをコピーする
- 以下のコマンドを叩く(URLは上記でコピーしたものに置き換え)
# rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
- CentOS 7/8
こちらは標準リポジトリで提供されているので。
# yum -y install epel-release
続いてRemiリポジトリの追加。
- CentOS 6
# yum -y install http://ftp.riken.jp/Linux/remi/enterprise/remi-release-6.rpm
- CentOS 7
# yum -y install http://ftp.riken.jp/Linux/remi/enterprise/remi-release-7.rpm
- CentOS 8
# yum -y install http://ftp.riken.jp/Linux/remi/enterprise/remi-release-8.rpm
これで完了です。
利用可能なPHPバージョンの確認
以下を実行してみます。
$ yum list 'php*' | grep '^php[0-9]*[.]'
- CentOS 6
php.x86_64 5.3.3-50.el6_10 @updates php54.x86_64 2.1-4.el6.remi remi-safe php55.x86_64 2.1-5.el6.remi remi-safe php56.x86_64 3.0-1.el6.remi remi-safe php70.x86_64 2.0-1.el6.remi remi-safe php71.x86_64 2.0-1.el6.remi remi-safe php72.x86_64 2.0-1.el6.remi remi-safe php73.x86_64 2.0-1.el6.remi remi-safe
- CentOS 7
php.x86_64 5.4.16-46.1.el7_7 @updates php.x86_64 5.4.16-48.el7 base php54.x86_64 2.1-4.el7.remi remi-safe php55.x86_64 2.1-5.el7.remi remi-safe php56.x86_64 3.0-1.el7.remi remi-safe php70.x86_64 2.0-1.el7.remi remi-safe php71.x86_64 2.0-1.el7.remi remi-safe php72.x86_64 2.0-1.el7.remi remi-safe php73.x86_64 2.0-1.el7.remi remi-safe php74.x86_64 1.0-3.el7.remi remi-safe php80.x86_64 1.0-3.el7.remi remi-safe
- CentOS 8
php.x86_64 7.2.11-1.module_el8.0.0+56+d1ca79aa @AppStream php.x86_64 7.2.11-2.module_el8.1.0+209+03b9a8ff AppStream php56.x86_64 3.0-1.el8.remi remi-safe php70.x86_64 2.0-1.el8.remi remi-safe php71.x86_64 2.0-1.el8.remi remi-safe php72.x86_64 2.0-1.el8.remi remi-safe php73.x86_64 2.0-1.el8.remi remi-safe php74.x86_64 1.0-3.el8.remi remi-safe php80.x86_64 1.0-3.el8.remi remi-safe
とまぁ、こんな感じです。
PHP 5.6の導入
試しにということで、各環境にPHP 5.6を入れて、Apache httpdと連携させてみます。
# yum -y install php56 php56-php httpd
さて、CLIでバージョン番号を確かめてみます。
$ php -v
どのような出力が得られたでしょうか?
PHP 5.3.3 (cli) (built: Nov 1 2019 12:28:08) Copyright (c) 1997-2010 The PHP Group Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies
?
PHP 5.4.16 (cli) (built: Nov 1 2019 16:04:20) Copyright (c) 1997-2013 The PHP Group Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies
?
PHP 7.2.11 (cli) (built: Oct 9 2018 15:09:36) ( NTS ) Copyright (c) 1997-2018 The PHP Group Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
?
bash: php: コマンドが見つかりません
?
これ、実は実体が「/usr/bin/php56」なので、標準版のPHP環境が入っているとそのバージョン、入っていないとコマンドが見つからないとなります。
Apache httpdと連携する場合も注意が必要で、設定ファイルを確認すると以下のような状態になっています。
- CentOS 6/7/8
# ls -1 /etc/httpd/conf.d/php* /etc/httpd/conf.d/php.conf /etc/httpd/conf.d/php56-php.conf
- CentOS 7
# ls -1 /etc/httpd/conf.modules.d/*php* /etc/httpd/conf.modules.d/10-php.conf /etc/httpd/conf.modules.d/10-php56-php.conf
- CentOS 8
# ls -1 /etc/httpd/conf.modules.d/*php* /etc/httpd/conf.modules.d/10-php56-php.conf /etc/httpd/conf.modules.d/15-php.conf
CentOS 8では「10-php56-php.conf」のLoadModuleが先に実行されるのでPHP 5.6が走りますが、CentOS 6/7では標準版のLoadModuleが先に実行されるので、注意しておかないと、どれが実行されているのか分からなくなります。
最後に、php.ini の位置も確認しておきましょう。
# /usr/bin/php56 -i 2>/dev/null | grep 'php.ini$' Loaded Configuration File => /opt/remi/php56/root/etc/php.ini