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

# はじめに
CentOS7系で、デフォルトでインストールできるPHPは、2017-12-30現在で、バージョン`5.4.16`である。
一方で、PHP本体は、5.4系以外にも、5.6系、7.0系、7.1系、7.2系、7.3系とさまざまにリリースされており、**5.5**以降や**7.0**以降のPHPが動作要件になることが多くなってきている。
そこで、今回、CentOS7のPHPを5.4系より新しいものにバージョンアップすることを考えた。いろいろなサイトを検索し、参考にさせてもらったが、いくつかハマった部分があったため、備忘録としてここに示す。以下の手順では、7.1系にバージョンアップすることを例にして述べていく。

ちなみに、PHP本体については、
バージョン5.6系は、2018/12/31を最後に、公式セキュリティーサポートは**終了**している。
バージョン7.0系は、2018/12/08を最後に、公式セキュリティーサポートは**終了**している。
バージョン7.1系は、2019/12/01を最後に、公式セキュリテイ−サポートは**終了**している。
詳しくは、以下のリンクから、PHPサポート期限を参照されたい。
[PHPのリリース日とサポート期限 - Qiita](https://qiita.com/bezeklik/items/72d1ff8393f66673e2bc)


## アップデート前環境概要
CentOSバージョン：CentOS Linux release 7.4.1708 (Core) 
Apacheバージョン：Server version: Apache/2.4.6 (CentOS)
MySQLバージョン：mysql  Ver 15.1 Distrib 5.5.56-MariaDB, for Linux (x86_64) using readline 5.1
PHPバージョン：PHP 5.4.16 (cli) 

# アップデート手順
## リポジトリの追加
PHPを標準のリポジトリからではなく、他のところから持ってくるため、EPELとREMIのリポジトリを追加しておく<sup>[(1)](https://qiita.com/ozawan/items/caf6e7ddec7c6b31f01e)</sup>。

【EPELリポジトリ】以下のいずれかのコマンドを実行
```bash
yum install epel-release
#または
rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
```


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

## 現在のPHPを全て削除
PHPをバージョンアップするにあたっては、結局、入れ直す必要がある。このためバージョンアップ、アップデートというよりは、再インストールするに近い。
なお、`/etc/php.ini`などでPHPに特殊に設定しているものがあれば、念のため`cp`コマンドなどで、退避しバックアップしておくといい。

```shell
cp /etc/php.ini /etc/php.ini.bk
```

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

```bash
yum remove php-*
```

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

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

【PHP5.6.xの場合】

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

【PHP7.0.xの場合】

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

【PHP7.1.xの場合】

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

【PHP7.2.xの場合】

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

【PHP7.3.xの場合】

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

なお、`--disablerepo=*`は、いったんリポジトリを全て無効にして、remiのみからPHPをとってくるために必要なオプションである。これがあればスムーズにバージョン指定ができる。
ちなみに筆者は、このオプション無しにコマンドを打つと、どうしてもPHP5.4.xのものが指定されてしまった。。。このオプションはつけておいて損はないと思われる<sup>[(2)](https://www.orenante.com/【centos7】php5-6-をインストールしたくて-enablereporemi-php56-を指定して/)</sup>。

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

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

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



## PHP関連パッケージの追加（もとのPHP環境に戻す）
上記で、PHP本体をインストールした。ここからは、以前のPHPで使っていた関連パッケージをインストールして元に戻す。特に変わった作業はないが、上記のPHP本体を入れる時に同時にしてしまうのも良い。
以下のコマンドでは、主要なものを列挙している。不要なものは削除したり、必要なものを追加して実行する。

【PHP5.6.xの場合】

```bash
yum install --disablerepo=* --enablerepo=epel,remi,remi-safe,remi-php56 php-devel php-pear php-cli php-fpm php-curl php-mysqlnd php-gd php-opcache php-zip php-intl php-common php-bcmath php-imagick php-xmlrpc php-json php-readline php-memcached php-redis php-mbstring php-apcu php-xml php-dom php-redis php-memcached php-memcache php-process
```
【PHP7.0.ｘの場合】

```bash
yum install --disablerepo=* --enablerepo=epel,remi,remi-safe,remi-php70 php-devel php-pear php-cli php-fpm php-curl php-mysqlnd php-gd php-opcache php-zip php-intl php-common php-bcmath php-imagick php-xmlrpc php-json php-readline php-memcached php-redis php-mbstring php-apcu php-xml php-dom php-redis php-memcached php-memcache php-process
```
【PHP7.1.xの場合】

```bash
yum install --disablerepo=* --enablerepo=epel,remi,remi-safe,remi-php71 php-devel php-pear php-cli php-fpm php-curl php-mysqlnd php-gd php-opcache php-zip php-intl php-common php-bcmath php-imagick php-xmlrpc php-json php-readline php-memcached php-redis php-mbstring php-apcu php-xml php-dom php-redis php-memcached php-memcache php-process
```
【PHP7.2.xの場合】

```bash
yum install --disablerepo=* --enablerepo=epel,remi,remi-safe,remi-php72 php-devel php-pear php-cli php-fpm php-curl php-mysqlnd php-gd php-opcache php-zip php-intl php-common php-bcmath php-imagick php-xmlrpc php-json php-readline php-memcached php-redis php-mbstring php-apcu php-xml php-dom php-redis php-memcached php-memcache php-process
```
【PHP7.3.xの場合】

```bash
yum install --disablerepo=* --enablerepo=epel,remi,remi-safe,remi-php73 php-devel php-pear php-cli php-fpm php-curl php-mysqlnd php-gd php-opcache php-zip php-intl php-common php-bcmath php-imagick php-xmlrpc php-json php-readline php-memcached php-redis php-mbstring php-apcu php-xml php-dom php-redis php-memcached php-memcache php-process
```
## PHP設定の復元
上記で必要なパーツはそろった。最後にPHPの設定を復元して終える。

:::note warn
事前にバックアップした、```php.ini.bk``` を参考にしながら復元する
:::

```bash
vim /etc/php.ini
```

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

*他にも様々なサイトを参考にさせてもらいましたが、主要な方（検索トップヒットで一番上に来る方）のみを抜粋させていただきました。ありがとうございました。*
(1) [CentOS6／CentOS7にPHP5.6／PHP7をyumでインストール - Qiita](https://qiita.com/ozawan/items/caf6e7ddec7c6b31f01e)
(2) [【CentOS7】PHP5.6 をインストールしたくて enablerepo=remi-php56 を指定しているのにbaseからしか取得してくれない【yum】 | 俺なんて….com ― ORENANTE.com ― ... orz](https://www.orenante.com/【centos7】php5-6-をインストールしたくて-enablereporemi-php56-を指定して/)