PHPアップデート(8.3)

PHP7.4のサポート終了から1年以上も放置状態だったので、PHP8.3にアップデートしました。

基本的には、前回PHP7.4にアップデートした際の記事「PHPアップデート」と同様です。

# cat /etc/redhat-release 
CentOS Linux release 7.9.2009 (Core)
# php -v
PHP 7.4.33 (cli) (built: Apr 10 2024 09:34:29) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
# yum list installed | grep php
gd3php.x86_64                       2.3.3-7.el7.remi           @remi-safe       
oniguruma5php.x86_64                6.9.9-1.el7.remi           @remi-safe       
php.x86_64                          7.4.33-14.el7.remi         @remi-php74      
php-cli.x86_64                      7.4.33-14.el7.remi         @remi-php74      
php-common.x86_64                   7.4.33-14.el7.remi         @remi-php74      
php-gd.x86_64                       7.4.33-14.el7.remi         @remi-php74      
php-json.x86_64                     7.4.33-14.el7.remi         @remi-php74      
php-mbstring.x86_64                 7.4.33-14.el7.remi         @remi-php74      
php-mysqlnd.x86_64                  7.4.33-14.el7.remi         @remi-php74      
php-pdo.x86_64                      7.4.33-14.el7.remi         @remi-php74      
php-pecl-mcrypt.x86_64              1.0.7-1.el7.remi.7.4       @remi-php74      
php-sodium.x86_64                   7.4.33-14.el7.remi         @remi-php74      

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

# mkdir /root/php_backup
# cd /etc
# tar zcvf /root/php_backup/php_bk.tar.gz php*

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

# php -m > /root/php_backup/php74m.txt
# cat /root/php_backup/php74m.txt 
[PHP Modules]
bz2
calendar
Core

〜 中略 〜

session
SimpleXML
sockets
sodium
SPL
sqlite3
standard
tokenizer
xml
xmlreader
xmlwriter
xsl
zlib

[Zend Modules]

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

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

WordPressのデータについてもバックアップしました。
バックアップ用にプラグイン「All-in-One WP Migration and Backup」を利用しました。

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

# rpm -qa | grep epel
epel-release-7-14.noarch
# rpm -qa | grep remi-release
remi-release-7.9-6.el7.remi.noarch
# yum repolist
読み込んだプラグイン:langpacks, versionlock
リポジトリー ID                         リポジトリー名                                                                        状態
base/7/x86_64                           CentOS-7 - Base                                                                       10,072
epel/x86_64                             Extra Packages for Enterprise Linux 7 - x86_64                                        13,798
extras/7/x86_64                         CentOS-7 - Extras                                                                        526
mariadb-main                            MariaDB Server                                                                           130
mariadb-maxscale                        MariaDB MaxScale                                                                           1
mariadb-tools                           MariaDB Tools                                                                             17
remi-php74                              Remi's PHP 7.4 RPM repository for Enterprise Linux 7 - x86_64                            469
remi-safe                               Safe Remi's RPM repository for Enterprise Linux 7 - x86_64                             5,596
updates/7/x86_64                        CentOS-7 - Updates                                                                     5,802
vz-base                                 vz-base                                                                                    1
vz-updates                              vz-updates                                                                                 4
repolist: 36,416

有効なリポジトリ(「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                                                         無効

〜 中略 〜

base/7/x86_64                         CentOS-7 - Base                                                                   有効: 10,072
base-debuginfo/x86_64                 CentOS-7 - Debuginfo                                                              無効
base-source/7                         CentOS-7 - Base Sources                                                           無効
c7-media                              CentOS-7 - Media                                                                  無効
centos-kernel/7/x86_64                CentOS LTS Kernels for x86_64                                                     無効
centos-kernel-experimental/7/x86_64   CentOS Experimental Kernels for x86_64                                            無効
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 Linux 7 - x86_64                                    有効: 13,798
epel-debuginfo/x86_64                 Extra Packages for Enterprise Linux 7 - x86_64 - Debug                            無効
epel-source/x86_64                    Extra Packages for Enterprise Linux 7 - x86_64 - Source                           無効
epel-testing/x86_64                   Extra Packages for Enterprise Linux 7 - Testing - x86_64                          無効
epel-testing-debuginfo/x86_64         Extra Packages for Enterprise Linux 7 - Testing - x86_64 - Debug                  無効
epel-testing-source/x86_64            Extra Packages for Enterprise Linux 7 - Testing - x86_64 - Source                 無効

〜 中略 〜

remi-php74                            Remi's PHP 7.4 RPM repository for Enterprise Linux 7 - x86_64                     有効:    469
remi-php74-debuginfo/x86_64           Remi's PHP 7.4 RPM repository for Enterprise Linux 7 - x86_64 - debuginfo         無効
remi-php74-test                       Remi's PHP 7.4 test RPM repository for Enterprise Linux 7 - x86_64                無効
remi-php74-test-debuginfo/x86_64      Remi's PHP 7.4 test RPM repository for Enterprise Linux 7 - x86_64 - debuginfo    無効
remi-php80                            Remi's PHP 8.0 RPM repository for Enterprise Linux 7 - x86_64                     無効
remi-php80-debuginfo/x86_64           Remi's PHP 8.0 RPM repository for Enterprise Linux 7 - x86_64 - debuginfo         無効
remi-php80-test                       Remi's PHP 8.0 test RPM repository for Enterprise Linux 7 - x86_64                無効
remi-php80-test-debuginfo/x86_64      Remi's PHP 8.0 test RPM repository for Enterprise Linux 7 - x86_64 - debuginfo    無効
remi-php81                            Remi's PHP 8.1 RPM repository for Enterprise Linux 7 - x86_64                     無効
remi-php81-debuginfo/x86_64           Remi's PHP 8.1 RPM repository for Enterprise Linux 7 - x86_64 - debuginfo         無効
remi-php81-test                       Remi's PHP 8.1 test RPM repository for Enterprise Linux 7 - x86_64                無効
remi-php81-test-debuginfo/x86_64      Remi's PHP 8.1 test RPM repository for Enterprise Linux 7 - x86_64 - debuginfo    無効
remi-php82                            Remi's PHP 8.2 RPM repository for Enterprise Linux 7 - x86_64                     無効
remi-php82-debuginfo/x86_64           Remi's PHP 8.2 RPM repository for Enterprise Linux 7 - x86_64 - debuginfo         無効
remi-php82-test                       Remi's PHP 8.2 test RPM repository for Enterprise Linux 7 - x86_64                無効
remi-php82-test-debuginfo/x86_64      Remi's PHP 8.2 test RPM repository for Enterprise Linux 7 - x86_64 - debuginfo    無効
remi-php83                            Remi's PHP 8.3 RPM repository for Enterprise Linux 7 - x86_64                     無効
remi-php83-debuginfo/x86_64           Remi's PHP 8.3 RPM repository for Enterprise Linux 7 - x86_64 - debuginfo         無効
remi-php83-test                       Remi's PHP 8.3 test RPM repository for Enterprise Linux 7 - x86_64                無効
remi-php83-test-debuginfo/x86_64      Remi's PHP 8.3 test RPM repository for Enterprise Linux 7 - x86_64 - debuginfo    無効
remi-safe                             Safe Remi's RPM repository for Enterprise Linux 7 - x86_64                        有効:  5,596
remi-safe-debuginfo/x86_64            Remi's RPM repository for Enterprise Linux 7 - x86_64 - debuginfo                 無効
remi-test                             Remi's test RPM repository for Enterprise Linux 7 - x86_64                        無効
remi-test-debuginfo/x86_64            Remi's test RPM repository for Enterprise Linux 7 - x86_64 - debuginfo            無効
updates/7/x86_64                      CentOS-7 - Updates                                                                有効:  5,802
updates-source/7                      CentOS-7 - Updates Sources                                                        無効
vz-base                               vz-base                                                                           有効:      1
vz-updates                            vz-updates                                                                        有効:      4
repolist: 36,416

「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

それぞれリポジトリを追加インストールする場合

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

# yum-config-manager --disable remi-php74

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

# yum-config-manager --enable remi-php83

1行目:永続的に「remi-php83」リポジトリを有効化する

# yum update

〜 中略 〜

完了しました!

1行目:アップデートの実行

# php -v
PHP Warning:  PHP Startup: Unable to load dynamic library 'dom' (tried: /usr/lib64/php/modules/dom (/usr/lib64/php/modules/dom: cannot open shared object file: No such file or directory), /usr/lib64/php/modules/dom.so (/usr/lib64/php/modules/dom.so: undefined symbol: zend_wrong_parameters_none_exception)) in Unknown on line 0
PHP Warning:  PHP Startup: Unable to load dynamic library 'simplexml' (tried: /usr/lib64/php/modules/simplexml (/usr/lib64/php/modules/simplexml: cannot open shared object file: No such file or directory), /usr/lib64/php/modules/simplexml.so (/usr/lib64/php/modules/simplexml.so: undefined symbol: zend_class_unserialize_deny)) in Unknown on line 0
PHP Warning:  PHP Startup: xml: Unable to initialize module
Module compiled with module API=20190902
PHP    compiled with module API=20230831
These options need to match
 in Unknown on line 0
PHP Warning:  PHP Startup: xmlwriter: Unable to initialize module
Module compiled with module API=20190902
PHP    compiled with module API=20230831
These options need to match
 in Unknown on line 0
PHP Warning:  PHP Startup: Unable to load dynamic library 'xsl' (tried: /usr/lib64/php/modules/xsl (/usr/lib64/php/modules/xsl: cannot open shared object file: No such file or directory), /usr/lib64/php/modules/xsl.so (/usr/lib64/php/modules/xsl.so: undefined symbol: dom_node_class_entry)) in Unknown on line 0
PHP Warning:  PHP Startup: Unable to load dynamic library 'xmlreader' (tried: /usr/lib64/php/modules/xmlreader (/usr/lib64/php/modules/xmlreader: cannot open shared object file: No such file or directory), /usr/lib64/php/modules/xmlreader.so (/usr/lib64/php/modules/xmlreader.so: undefined symbol: dom_node_class_entry)) in Unknown on line 0
PHP 8.3.6 (cli) (built: Apr 10 2024 14:21:20) (NTS gcc x86_64)
Copyright (c) The PHP Group
Zend Engine v4.3.6, Copyright (c) Zend Technologies

1行目:バージョンを確認
2〜15行目:警告の表示
16行目:バージョン「PHP8.3.6」を確認

警告を基に色々調べると、いくつかインストールしていないパッケージがあったので追加します。

# yum install php-xml php-devel
# php -v
PHP 8.3.6 (cli) (built: Apr 10 2024 14:21:20) (NTS gcc x86_64)
Copyright (c) The PHP Group
Zend Engine v4.3.6, Copyright (c) Zend Technologies

警告の表示が出なくなりました。

# rpm -qa | grep php
oniguruma5php-6.9.9-1.el7.remi.x86_64
php-common-8.3.6-1.el7.remi.x86_64
php-8.3.6-1.el7.remi.x86_64
php-pecl-mcrypt-1.0.7-1.el7.remi.8.3.x86_64
php-devel-8.3.6-1.el7.remi.x86_64
gd3php-2.3.3-7.el7.remi.x86_64
php-cli-8.3.6-1.el7.remi.x86_64
php-sodium-8.3.6-1.el7.remi.x86_64
php-mysqlnd-8.3.6-1.el7.remi.x86_64
php-gd-8.3.6-1.el7.remi.x86_64
php-pdo-8.3.6-1.el7.remi.x86_64
php-mbstring-8.3.6-1.el7.remi.x86_64
php-xml-8.3.6-1.el7.remi.x86_64

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

インストールしたバージョンの設定ファイルは、「php.ini.rpmnew」として作成されるので「diff」コマンドで違いを確認することができます。
必要な修正等をして「php.ini」にリネームします。

# diff /etc/php.ini /etc/php.ini.rpmnew

1行目:「diff」コマンドでファイルを比較

# php -m > /root/php_backup/php83m.txt

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

# diff /root/php_backup/php74m.txt /root/php_backup/php83m.txt 
29a30
> random

1行目:「diff」コマンドでファイルの内容を比較し、「random」が追加されているのを確認

詳細は、「PHPマニュアル」を参照

# systemctl reload httpd.service

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

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

ブログについては、問題なく表示されています。
が、「Nagios」のグラフ表示でエラーが表示されました。

Fatal error: Uncaught Error: Undefined constant "MB_OVERLOAD_STRING" in /usr/local/pnp4nagios/lib/kohana/system/core/utf8.php:52 Stack trace: #0 /usr/local/pnp4nagios/lib/kohana/system/core/Bootstrap.php(32): require() #1 /usr/local/pnp4nagios/share/index.php(145): require('/usr/local/pnp4...') #2 {main} thrown in /usr/local/pnp4nagios/lib/kohana/system/core/utf8.php on line 52

マルチバイト文字列を扱う関数で定義された定数(MB_OVERLOAD_STRING)で致命的なエラーが発生しているようです。
PHPマニュアル」では、PHP8.0で削除されたとありました。
グラフ表示するために「PNP4Nagios」を利用していましたが、更新もされていないようでそろそろ違う方法を検討する時かもしれません。

グラフでの表示はできませんが、Nagiosでの監視には影響はないので放置することとしました。
CentOS7のサポート期限も間もなくなので、そろそろ本格的にサーバ移行も考えなければ…

いいね! & シェア お願いします。

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