Help us understand the problem. What is going on with this article?

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

アップデート前環境概要

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした