PHPのアップデート

WordPressのダッシュボードにPHPのアップデートを促すメッセージが出てたので、PHP7.2からPHP7.4へアップデートした際の備忘録です。

◆バージョン確認

・OSのバージョン
# cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)
・PHPのバージョン
# php -v
PHP 7.2.6 (cli) (built: May 23 2018 09:50:51) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologi
・インストール済みのPHPパッケージ
# yum list installed | grep php
php.x86_64                   7.2.6-1.el7.remi           @remi-php72
php-cli.x86_64               7.2.6-1.el7.remi           @remi-php72
php-common.x86_64            7.2.6-1.el7.remi           @remi-php72
php-devel.x86_64             7.2.6-1.el7.remi           @remi-php72
php-gd.x86_64                7.2.6-1.el7.remi           @remi-php72
php-json.x86_64              7.2.6-1.el7.remi           @remi-php72
php-mbstring.x86_64          7.2.6-1.el7.remi           @remi-php72
php-mysqlnd.x86_64           7.2.6-1.el7.remi           @remi-php72
php-pdo.x86_64               7.2.6-1.el7.remi           @remi-php72
php-pecl-mcrypt.x86_64       1.0.1-6.el7.remi.7.2       @remi-php72
php-xml.x86_64               7.2.6-1.el7.remi           @remi-php72

◆バックアップ

必要により、バックアップをします。
不具合発生時に備えて一応バックアップしました。

・PHPの設定ファイル等
# mkdir /root/php_backup
# cd /etc
# tar zcvf /root/php_backup/php_bk.tar.gz php*

1行目:任意のディレクトリにバックアップ用のディレクトリを作成
2行目:PHPの設定ファイルがあるディレクトリへ移動
3行目:必要なPHP関連ファイル等(今回は「php*」ですべて)をアーカイブ圧縮ファイルにする

・PHPモジュールリスト
# php -m > /root/php_backup/php72m.txt
# cat /root/php_backup/php72m.txt
[PHP Modules]
bz2
calendar
Core

~ 中略 ~

sqlite3
standard
tokenizer
wddx
xml
xmlreader
xmlwriter
xsl
zlib

[Zend Modules]

1行目:「php -m」コマンドでモジュールリストを出力し、バックアップディレクトリに「php72m.txt」というファイル名に書き出し
2行目:ファイルの確認

アップデート後にリストを比較するために利用します。

・WordPress

WordPressのデータについてもバックアップしました。
今回は、WordPressデフォルト機能のエクスポートを使用しました。
バックアップツールについては、各種プラグイン等も多々あるので必要に応じて実施します。

◆リポジトリの追加・確認

PHPのアップデートには、「EPEL」および「REMI」リポジトリが必要です。
追加されているか確認し、なければ追加します。
私の場合、既に追加済みでしたので下記のとおり確認できました。

・EPELの確認
# rpm -qa | grep epel
epel-release-7-13.noarch
・REMIの確認
# rpm -qa | grep remi-release
remi-release-7.9-1.el7.remi.noarch
・yumによるリポジトリの確認
# yum repolist
読み込んだプラグイン:langpacks, versionlock
リポジトリー ID   リポジトリー名                                           状態
base/7/x86_64    CentOS-7 - Base                                        10,069+3
*epel/x86_64     Extra Packages for Enterprise Linux 7 - x86_64           13,603
extras/7/x86_64  CentOS-7 - Extras                                           498
mariadb          MariaDB                                                    96+3
remi-safe        Safe Remi's RPM repository for Enterprise Linux 7 - x8    4,352
updates/7/x86_64 CentOS-7 - Updates                                      2,452+6
vz-base          vz-base                                                       1
vz-updates       vz-updates                                                    4
repolist: 31,075

有効なリポジトリ(「enable=1」の状態)一覧

# yum repolist all
読み込んだプラグイン:langpacks, versionlock
リポジトリー ID                      リポジトリー名                 状態
C7.0.1406-base/x86_64               CentOS-7.0.1406 - Base        無効
C7.0.1406-centosplus/x86_64         CentOS-7.0.1406 - CentOSPlus  無効
C7.0.1406-extras/x86_64             CentOS-7.0.1406 - Extras      無効
C7.0.1406-fasttrack/x86_64          CentOS-7.0.1406 - Fasttrack   無効
C7.0.1406-updates/x86_64            CentOS-7.0.1406 - Updates     無効

~ 中略 ~

centosplus/7/x86_64                 CentOS-7 - Plus               無効
centosplus-source/7                 CentOS-7 - Plus Sources       無効
cr/7/x86_64                         CentOS-7 - cr                 無効
*epel/x86_64                        Extra Packages for Enterprise 有効:   13,603
epel-debuginfo/x86_64               Extra Packages for Enterprise 無効
epel-source/x86_64                  Extra Packages for Enterprise 無効
epel-testing/x86_64                 Extra Packages for Enterprise 無効
epel-testing-debuginfo/x86_64       Extra Packages for Enterprise 無効
epel-testing-source/x86_64          Extra Packages for Enterprise 無効
extras/7/x86_64                     CentOS-7 - Extras             有効:      498
extras-source/7                     CentOS-7 - Extras Sources     無効
fasttrack/7/x86_64                  CentOS-7 - fasttrack          無効
mariadb                             MariaDB                       有効:     96+3
!remi                               Remi's RPM repository for Ent 無効
remi-debuginfo/x86_64               Remi's RPM repository for Ent 無効
remi-glpi91                         Remi's GLPI 9.1 RPM repositor 無効
remi-glpi92                         Remi's GLPI 9.2 RPM repositor 無効
remi-glpi93                         Remi's GLPI 9.3 RPM repositor 無効
remi-glpi94                         Remi's GLPI 9.4 RPM repositor 無効
remi-modular                        Remi's Modular repository for 無効
remi-modular-test                   Remi's Modular testing reposi 無効
remi-php54                          Remi's PHP 5.4 RPM repository 無効
remi-php55                          Remi's PHP 5.5 RPM repository 無効

~ 中略 ~

remi-php71-test-debuginfo/x86_64    Remi's PHP 7.1 test RPM repos 無効
!remi-php72                         Remi's PHP 7.2 RPM repository 無効
remi-php72-debuginfo/x86_64         Remi's PHP 7.2 RPM repository 無効
remi-php72-test                     Remi's PHP 7.2 test RPM repos 無効
remi-php72-test-debuginfo/x86_64    Remi's PHP 7.2 test RPM repos 無効
remi-php73                          Remi's PHP 7.3 RPM repository 無効
remi-php73-debuginfo/x86_64         Remi's PHP 7.3 RPM repository 無効
remi-php73-test                     Remi's PHP 7.3 test RPM repos 無効
remi-php73-test-debuginfo/x86_64    Remi's PHP 7.3 test RPM repos 無効
remi-php74                          Remi's PHP 7.4 RPM repository 無効
remi-php74-debuginfo/x86_64         Remi's PHP 7.4 RPM repository 無効
remi-php74-test                     Remi's PHP 7.4 test RPM repos 無効
remi-php74-test-debuginfo/x86_64    Remi's PHP 7.4 test RPM repos 無効
remi-php80                          Remi's PHP 8.0 RPM repository 無効
remi-php80-debuginfo/x86_64         Remi's PHP 8.0 RPM repository 無効
remi-php80-test                     Remi's PHP 8.0 test RPM repos 無効
remi-php80-test-debuginfo/x86_64    Remi's PHP 8.0 test RPM repos 無効
remi-safe                           Safe Remi's RPM repository fo 有効:    4,352
remi-safe-debuginfo/x86_64          Remi's RPM repository for Ent 無効
remi-test                           Remi's test RPM repository fo 無効
remi-test-debuginfo/x86_64          Remi's test RPM repository fo 無効
updates/7/x86_64                    CentOS-7 - Updates            有効:  2,452+6
updates-source/7                    CentOS-7 - Updates Sources    無効
vz-base                             vz-base                       有効:        1
vz-updates                          vz-updates                    有効:        4
repolist: 31,075

「all」を付けることで、登録されているリポジトリすべてを表示

・リポジトリの追加
# wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
# wget https://rpms.remirepo.net/enterprise/remi-release-7.rpm
# rpm -Uvh remi-release-7.rpm epel-release-latest-7.noarch.rpm

◆PHPのアップデート

REMIリポジトリのブログによると、必要なPHPのバージョンにより管理者が有効化する必要があるようで、今回PHPのバージョンを最新の7.4にアップデートするため「remi-php74」リポジトリを有効化します。

・「remi-php74」リポジトリの有効化
# yum-config-manager --enable remi-php74

1行目:永続的に「remi-php74」リポジトリを有効化する
「yum-config-manager」が利用できない場合は、REMIリポジトリのブログにあるように「yum-utils」をインストールする必要があります。

・アップデート
# yum update

~ 中略 ~

完了しました!

1行目:アップデートを実行する

私の場合、アップデートの際いくつかのパッケージで複数のバージョンがインストールされていてエラーとなりました。
その際の対処方法はまた、後日書きたいと思います。yum updateのエラー対処

◆確認

・PHPのバージョン
# php -v
PHP 7.4.20 (cli) (built: Jun  1 2021 15:41:56) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
・PHPパッケージ
# rpm -qa | grep php
php-pecl-mcrypt-1.0.4-1.el7.remi.7.4.x86_64
oniguruma5php-6.9.7.1-1.el7.remi.x86_64
php-mbstring-7.4.20-1.el7.remi.x86_64
php-cli-7.4.20-1.el7.remi.x86_64
php-gd-7.4.20-1.el7.remi.x86_64
php-7.4.20-1.el7.remi.x86_64
php-common-7.4.20-1.el7.remi.x86_64
php-xml-7.4.20-1.el7.remi.x86_64
php-sodium-7.4.20-1.el7.remi.x86_64
php-pdo-7.4.20-1.el7.remi.x86_64
php-devel-7.4.20-1.el7.remi.x86_64
php-mysqlnd-7.4.20-1.el7.remi.x86_64
php-json-7.4.20-1.el7.remi.x86_64

1行目:最初とは違う方法で確認

・PHP設定ファイル等
# ll /etc/php.ini php_backup/php.ini
-rw-r--r-- 1 root root 62270  5月 24  2020 /etc/php.ini
-rw-r--r-- 1 root root 62270  5月 24  2020 php_backup/php.ini

「php.ini」ファイルについては、ファイル自体(タイムスタンプ)に更新はありません

# diff php_backup/php.d/ /etc/php.d/
/etc/php.d/ のみに存在: 20-sodium.ini
php_backup/php.d/ のみに存在: 30-wddx.ini

# diff php_backup/php-zts.d/ /etc/php-zts.d/
/etc/php-zts.d/ のみに存在: 20-sodium.ini
php_backup/php-zts.d/ のみに存在: 30-wddx.ini

1,5行目:「diff」コマンドで比較し、追加と削除がそれぞれされているのを確認

・PHPモジュール
# php -m > /root/php_backup/php74m.txt

1行目:最初と同様にモジュールリストを別名でファイルに書き出す

# diff php_backup/php72m.txt php_backup/php74m.txt
34a35
> sodium
39d39
< wddx

1行目:「diff」コマンドでファイルの内容を比較し、上記で比較したファイルと同名のものが追加と削除されているのを確認

「WDDX」モジュールについては、PHPのマニュアルを見ると、PHP7.4には、非推奨とされバンドルされていないようです。

追加された「Sodium」モジュールについては、PHP7.2からの新機能で暗号ライブラリのようです。詳細は、PHPのマニュアルを参照

・httpdサービス
# systemctl reload httpd.service

1行目:「httpd」サービスをリロード

最後にブラウザで当ブログを確認してみました。

が、表示が崩れて全部が表示されず、「重大なエラーが発生しました」の文字が出ていました。
WordPressの管理画面には異状なくログインできましたので、致命的なエラーではないようです。
エラー時の対処要領については、また別の記事で書きたいと思います。
WordPressでPHPアップデート後にエラー

結果的に原因は、インストールしているプラグイン「Crayon Syntax Highlighter」にありました。
更新も5年前からされてはいなかったのですが、便利なので利用し続けていました。
調べてみると、PHP7.4では利用不可となっていましたので、プラグインを無効化にしてみると正常に表示されるようになりました。

ソースコードの表示などに利用するプラグインも新規に「SyntaxHighlighter Evolved」をインストールし、この記事を書いています。
今まで書いていたコマンド等を載せている記事では、ハイライトされず見づらくなったかもしれません…

記事は長くなりましたが、アップデートするだけならそんなに難しくないかと思います。

LINEで送る
Pocket

コメントは受け付けていません。