LoginSignup
200
215

More than 1 year has passed since last update.

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

Last updated at Posted at 2017-12-29

はじめに

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

アップデート前環境概要

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のリポジトリを追加しておく(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コマンドなどで、退避しバックアップしておくといい。

cp /etc/php.ini /etc/php.ini.bk

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

yum remove php-*

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

新しいPHPをインストール

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

【PHP5.6.xの場合】

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

【PHP7.0.xの場合】

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

【PHP7.1.xの場合】

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

【PHP7.2.xの場合】

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

【PHP7.3.xの場合】

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等でリポジトリを指定してやったのにもかかわらず、依存関係のチェックでエラーが出てしまう場合、

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の場合】

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.xの場合】

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の場合】

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の場合】

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の場合】

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の設定を復元して終える。

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

vim /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

200
215
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
200
215