PHP7.4のサポート終了から1年以上も放置状態だったので、PHP8.3にアップデートしました。
基本的には、前回PHP7.4にアップデートした際の記事「PHPアップデート」と同様です。
◆バージョン確認
・OSのバージョン
1 2 | # cat /etc/redhat-release CentOS Linux release 7.9.2009 (Core) |
・PHPのバージョン
1 2 3 4 | # 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 |
・インストール済みのPHPパッケージ
1 2 3 4 5 6 7 8 9 10 11 12 13 | # 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 |
◆バックアップ
必要により、不具合発生時に備えてバックアップします。
・PHPの設定ファイル等
1 2 3 | # mkdir /root/php_backup # cd /etc # tar zcvf /root/php_backup/php_bk.tar.gz php* |
1行目:任意のディレクトリにバックアップ用のディレクトリを作成
2行目:PHPの設定ファイルがあるディレクトリへ移動
3行目:必要なPHP関連ファイル等(今回は「php*」ですべて)をアーカイブ圧縮ファイルにする
・PHPモジュールリスト
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | # 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
WordPressのデータについてもバックアップしました。
バックアップ用にプラグイン「All-in-One WP Migration and Backup」を利用しました。
◆リポジトリの追加・確認
PHPのアップデートには、「EPEL」および「REMI」リポジトリが必要です。
追加されているか確認し、なければ追加します。
私の場合、既に追加済みでしたので下記のとおり確認できました。
・EPELの確認
1 2 | # rpm -qa | grep epel epel-release-7-14.noarch |
・REMIの確認
1 2 | # rpm -qa | grep remi-release remi-release-7.9-6.el7.remi.noarch |
・yumによるリポジトリの確認
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | # 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」の状態)一覧
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | # 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」オプションを付けることで、登録されているリポジトリすべてを表示
・リポジトリの追加
1 2 3 | # 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のバージョンにより管理者が有効化する必要があります。
前回使用したリポジトリ「remi-php74」を無効化し、今回PHPのバージョンを最新の8.3にアップデートするため「remi-php83」リポジトリを有効化します。
・「remi-php74」リポジトリの無効化
1 | # yum-config-manager --disable remi-php74 |
1行目:「remi-php74」リポジトリを無効化する
「yum-config-manager」が利用できない場合は、REMIリポジトリのブログにあるように「yum-utils」をインストールする必要があります。
・「remi-php83」リポジトリの有効化
1 | # yum-config-manager --enable remi-php83 |
1行目:永続的に「remi-php83」リポジトリを有効化する
・アップデート
1 2 3 4 5 | # yum update 〜 中略 〜 完了しました! |
1行目:アップデートの実行
◆確認
・PHPのバージョン
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | # 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」を確認
・PHPパッケージの追加
警告を基に色々調べると、いくつかインストールしていないパッケージがあったので追加します。
1 | # yum install php-xml php-devel |
・PHPのバージョン再確認
1 2 3 4 | # 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 |
警告の表示が出なくなりました。
・PHPパッケージ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | # 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設定ファイルの確認
インストールしたバージョンの設定ファイルは、「php.ini.rpmnew」として作成されるので「diff」コマンドで違いを確認することができます。
必要な修正等をして「php.ini」にリネームします。
1 | # diff /etc/php.ini /etc/php.ini.rpmnew |
1行目:「diff」コマンドでファイルを比較
・PHPモジュール
1 | # php -m > /root/php_backup/php83m.txt |
1行目:最初と同様にモジュールリストを別名でファイルに書き出す
1 2 3 | # diff /root/php_backup/php74m.txt /root/php_backup/php83m.txt 29a30 > random |
1行目:「diff」コマンドでファイルの内容を比較し、「random」が追加されているのを確認
詳細は、「PHPマニュアル」を参照
・httpdサービス
1 | # systemctl reload httpd.service |
1行目:「httpd」サービスをリロード
最後にブラウザで当ブログ等を確認してみました。
ブログについては、問題なく表示されています。
が、「Nagios」のグラフ表示でエラーが表示されました。
◆エラー内容
1 | 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のサポート期限も間もなくなので、そろそろ本格的にサーバ移行も考えなければ…