PHP
Yum
centos7

CentOS7のPHPのバージョンを5.4.xから5.6.x/7.0.x/7.1.xにバージョンアップする

はじめに

CentOS7.Xで標準的にインストールされるPHPのバージョンは、2017-12-30現在で、5.4.16である。
筆者は、運用しているCentOS7サーバで、eポートフォリオシステムmaharaを動かしているが、2017-10-30にリリースされた17.10.Xから、PHPの推奨バージョンが、PHP5.5.X以降になった。
このため、最新バージョンのmaharaを動かすにあたって、標準で提供されているPHPのバージョンでは、運用ができないことがわかる。
そこで、CentOS7のサーバのPHPのバージョンを最新の7.1.Xにしてしまおうと考えた。
しかし、いろいろなサイトを検索し、参考にさせてもらったが、いくつかハマった部分があったため、備忘録としてここに示す。

アップデート前環境概要

L):CentOSバージョン:CentOS Linux release 7.4.1708 (Core)
A):Apacheバージョン:Server version: Apache/2.4.6 (CentOS)
M):MySQLバージョン:mysql Ver 15.1 Distrib 5.5.56-MariaDB, for Linux (x86_64) using readline 5.1
P):PHPバージョン:PHP 5.4.16 (cli)

アップデート手順

リポジトリの追加

PHPを標準のリポジトリからではなく、他のところから持ってくるため、EPELとREMIのリポジトリを追加しておく(参考文献(1))。

【EPELリポジトリ】
以下のコマンドを打つ
# yum install epel-release
または
# rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

【REMIリポジトリ】
以下のコマンドを打つ
# rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm

現在のPHPを全て削除

PHPをバージョンアップするにあたっては、結局、入れ直す必要がある。このためバージョンアップ、アップデートというよりは、再インストールするに近い。
なお、/etc/php.iniなどでPHPに特殊に設定しているものがあれば、念のためcpコマンドなどで、退避しバックアップしておくといい。
設定ファイルのバックアップ等が済んだら、以下のコマンドを打つ
# yum remove php-*

これで、PHPが亡くなった。。。。

新しいPHPをインストール

ここから標準よりも新しいバージョンのPHPを入れていく。なお、最新にすればいいというものでもなく、関数が変更されていたりすることから5.6や7.0、7.1のいずれかを検討してインストールすること。
バージョンを決めたら以下のコマンドを打つ、そしてインストールする

【PHP5.6.xの場合】
# yum install --disablerepo=* --enablerepo=remi,remi-php56 php

【PHP7.0.xの場合】
# yum install --disablerepo=* --enablerepo=remi,remi-php70 php

【PHP7.1.xの場合】
# yum install --disablerepo=* --enablerepo=remi,remi-php71 php

なお、--disablerepo=*は、いったんリポジトリを全て無効にして、remiのみからPHPをとってくるために必要なオプションである。これがあればスムーズにバージョン指定ができる。
ちなみに筆者は、このオプション無しにコマンドを打つと、どうしてもPHP5.4.xのものが指定されてしまった。。。このオプションはつけておいて損はないと思われる(参考文献(2))。

PHP関連パッケージの追加(もとのPHP環境に戻す)

上記で、PHP本体をインストールした。ここからは、以前のPHPで使っていた関連パッケージをインストールして元に戻す。特に変わった作業はないが、上記のPHP本体を入れる時に同時にしてしまうのも良い。
関連パッケージでインストールするものが決まったら、次のコマンドを打つ、そしてインストールする

例)php-mysqlndphp-intl を入れたいとき

【PHP5.6.xの場合】
# yum install --disablerepo=* --enablerepo=remi,remi-php56 php-mysqlnd php-intl

【PHP7.0.xの場合】
# yum install --disablerepo=* --enablerepo=remi,remi-php70 php-mysqlnd php-intl

【PHP7.1.xの場合】
# yum install --disablerepo=* --enablerepo=remi,remi-php71 php-mysqlnd php-intl

PHP設定の復元

上記で必要なパーツはそろった。最後にPHPの設定を復元して終える。
# vi /etc/php.ini
必要な項目をコメントアウトを取ったりしておわる。

おわりに

PHP5.4.xからのバージョンアップは、結局のところ、入れ直すだけである。そのためのコマンドを探すのが大変なのであると感じた。
他にも様々なサイトを参考にさせてもらいましたが、主要な方(検索トップヒットで一番上に来る方)のみを抜粋させていただきました。ありがとうございました。