Edited at

CentOS7のPHPを5.6/7.0/7.1/7.2/7.3系にバージョンアップする


はじめに

CentOS7系で標準的にインストールされるPHPのバージョンは、2017-12-30現在で、5.4.16である。しかし、バージョン5.4系はサポートアウトしていること、最近のソースコードでは5.5以降や7.0以降を求めるものも多くなっている。

そこで、Centos7のPHPをバージョンアップし7.1系にしてしまおうと考えた。いろいろなサイトを検索し、参考にさせてもらったが、いくつかハマった部分があったため、備忘録としてここに示す。

==== 2019-05-20 ====

バージョン5.6系は、2018/12/31を最後に、公式セキュリティーサポートは終了している。

バージョン7.0系は、2018/12/08を最後に、公式セキュリティーサポートは終了している。

バージョン7.1系は、2019/12/01までが、公式セキュリテイ−サポート期限となっている。

詳しくは、以下のリンクから、PHPサポート期限を参照されたい。

PHPのリリース日とサポート期限 - Qiita

==== 2018-12-13 ====

バージョン7.2系と7.3を追記


アップデート前環境概要

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リポジトリ】

以下のコマンドを打つ


root

 yum install epel-release


または


root

rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm


【REMIリポジトリ】

以下のコマンドを打つ


root

rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm



現在のPHPを全て削除

PHPをバージョンアップするにあたっては、結局、入れ直す必要がある。このためバージョンアップ、アップデートというよりは、再インストールするに近い。

なお、/etc/php.iniなどでPHPに特殊に設定しているものがあれば、念のためcpコマンドなどで、退避しバックアップしておくといい。


root

cp /etc/php.ini /etc/php-old.ini


設定ファイルのバックアップ等が済んだら、以下のコマンドを打つ


root

yum remove php-*


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


新しいPHPをインストール

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

バージョンを決めたら以下のコマンドを打つ、そしてインストールする

【PHP5.6.xの場合】


root

yum install --disablerepo=* --enablerepo=epel,remi,remi-safe,remi-php56 php


【PHP7.0.xの場合】


root

yum install --disablerepo=* --enablerepo=epel,remi,remi-safe,remi-php70 php


【PHP7.1.xの場合】


root

yum install --disablerepo=* --enablerepo=epel,remi,remi-safe,remi-php71 php


【PHP7.2.xの場合】


root

yum install --disablerepo=* --enablerepo=epel,remi,remi-safe,remi-php72 php


【PHP7.3.xの場合】


root

yum install --disablerepo=* --enablerepo=epel,remi,remi-safe,remi-php73 php


なお、--disablerepo=*は、いったんリポジトリを全て無効にして、remiのみからPHPをとってくるために必要なオプションである。これがあればスムーズにバージョン指定ができる。

ちなみに筆者は、このオプション無しにコマンドを打つと、どうしてもPHP5.4.xのものが指定されてしまった。。。このオプションはつけておいて損はないと思われる(2)

= = = 2019-05-19追記 = = = =

--disablerepo=* --enablerepo=remi,remi-php72等でリポジトリを指定してやったのにもかかわらず、依存関係のチェックでエラーが出てしまう場合、


root

yum install --disablerepo=base --enablerepo=epel,remi,remi-safe,remi-php72 php


のように、epelからも依存関係のチェックができるように、リポジトリを有効にするとうまくいくことがある。また、5.4系が入っているbaseのみを明示的にdisablerepoするとうまくいくことがある。


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

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

関連パッケージでインストールするものが決まったら、次のコマンドを打つ、そしてインストールする

例)php-mbstringを入れたいとき

【PHP5.6.xの場合】


root

yum install --disablerepo=* --enablerepo=epel,remi,remi-safe,remi-php56 php-mbstring


【PHP7.0.xの場合】


root

yum install --disablerepo=* --enablerepo=epel,remi,remi-safe,remi-php70 php-mbstring


【PHP7.1.xの場合】


root

yum install --disablerepo=* --enablerepo=epel,remi,remi-safe,remi-php71 php-mbstring


【PHP7.2.xの場合】


root

yum install --disablerepo=* --enablerepo=epel,remi,remi-safe,remi-php72 php-mbstring


【PHP7.3.xの場合】


root

yum install --disablerepo=* --enablerepo=epel,remi,remi-safe,remi-php73 php-mbstring



PHP設定の復元

上記で必要なパーツはそろった。最後にPHPの設定を復元して終える。


root

vi /etc/php.ini


必要な項目をコメントアウトを取ったりしておわる。


おわりに

PHP5.4.xからのバージョンアップは、結局のところ、入れ直すだけである。そのためのコマンドを探すのが大変なのであると感じた。

他にも様々なサイトを参考にさせてもらいましたが、主要な方(検索トップヒットで一番上に来る方)のみを抜粋させていただきました。ありがとうございました。

(1) CentOS6/CentOS7にPHP5.6/PHP7をyumでインストール - Qiita

(2) 【CentOS7】PHP5.6 をインストールしたくて enablerepo=remi-php56 を指定しているのにbaseからしか取得してくれない【yum】 | 俺なんて….com ― ORENANTE.com ― ... orz