HHeLiBeXの日記 正道編

日々の記憶の記録とメモ‥

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プロジェクト

RedHatLinuxPHPの最新版を提供することをミッションとする』だそうです。

ちなみに、多くの記事で「rpms.famillecollet.com」からインストールする例を見ましたが、2020年6月15日現在、ここではミラーされていないようで、本家へのリダイレクトになっています。

Remiリポジトリの追加

上記のサイトでミラーサイトを確認し、適当なところから選び出します。日本では「http://ftp.riken.jp/Linux/remi/」が提供されているので、今回はそこを利用します。

まず、EPELが必要となるので、その追加から。

# rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

こちらは標準リポジトリで提供されているので。

# yum -y install epel-release

続いてRemiリポジトリの追加。

# yum -y install http://ftp.riken.jp/Linux/remi/enterprise/remi-release-6.rpm
# yum -y install http://ftp.riken.jp/Linux/remi/enterprise/remi-release-7.rpm
# yum -y install http://ftp.riken.jp/Linux/remi/enterprise/remi-release-8.rpm

これで完了です。

利用可能なPHPバージョンの確認

以下を実行してみます。

$ yum list 'php*' | grep '^php[0-9]*[.]'
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
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
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と連携する場合も注意が必要で、設定ファイルを確認すると以下のような状態になっています。

# ls -1 /etc/httpd/conf.d/php*
/etc/httpd/conf.d/php.conf
/etc/httpd/conf.d/php56-php.conf
# 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
# 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

参考