はじめに
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