WordPressのダッシュボードにPHPのアップデートを促すメッセージが出てたので、PHP7.2からPHP7.4へアップデートした際の備忘録です。
◆バージョン確認
・OSのバージョン
1 2 | # cat /etc/redhat-release CentOS Linux release 7.9.2009 (Core) |
・PHPのバージョン
1 2 3 4 | # 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パッケージ
1 2 3 4 5 6 7 8 9 10 11 12 | # 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の設定ファイル等
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 | # 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の確認
1 2 | # rpm -qa | grep epel epel-release-7-13.noarch |
・REMIの確認
1 2 | # rpm -qa | grep remi-release remi-release-7.9-1.el7.remi.noarch |
・yumによるリポジトリの確認
1 2 3 4 5 6 7 8 9 10 11 12 | # 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」の状態)一覧
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 59 60 61 62 63 | # 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」を付けることで、登録されているリポジトリすべてを表示
・リポジトリの追加
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のバージョンにより管理者が有効化する必要があるようで、今回PHPのバージョンを最新の7.4にアップデートするため「remi-php74」リポジトリを有効化します。
・「remi-php74」リポジトリの有効化
1 | # yum-config-manager --enable remi-php74 |
1行目:永続的に「remi-php74」リポジトリを有効化する
「yum-config-manager」が利用できない場合は、REMIリポジトリのブログにあるように「yum-utils」をインストールする必要があります。
・アップデート
1 2 3 4 5 | # yum update ~ 中略 ~ 完了しました! |
1行目:アップデートを実行する
私の場合、アップデートの際いくつかのパッケージで複数のバージョンがインストールされていてエラーとなりました。
その際の対処方法はまた、後日書きたいと思います。「yum updateのエラー対処」
◆確認
・PHPのバージョン
1 2 3 4 | # 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パッケージ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | # 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設定ファイル等
1 2 3 | # 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」ファイルについては、ファイル自体(タイムスタンプ)に更新はありません
1 2 3 4 5 6 7 | # 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モジュール
1 | # php -m > /root/php_backup/php74m.txt |
1行目:最初と同様にモジュールリストを別名でファイルに書き出す
1 2 3 4 5 | # diff php_backup/php72m.txt php_backup/php74m.txt 34a35 > sodium 39d39 < wddx |
1行目:「diff」コマンドでファイルの内容を比較し、上記で比較したファイルと同名のものが追加と削除されているのを確認
「WDDX」モジュールについては、PHPのマニュアルを見ると、PHP7.4には、非推奨とされバンドルされていないようです。
追加された「Sodium」モジュールについては、PHP7.2からの新機能で暗号ライブラリのようです。詳細は、PHPのマニュアルを参照
・httpdサービス
1 | # systemctl reload httpd.service |
1行目:「httpd」サービスをリロード
最後にブラウザで当ブログを確認してみました。
が、表示が崩れて全部が表示されず、「重大なエラーが発生しました」の文字が出ていました。
WordPressの管理画面には異状なくログインできましたので、致命的なエラーではないようです。
エラー時の対処要領については、また別の記事で書きたいと思います。
「WordPressでPHPアップデート後にエラー」
結果的に原因は、インストールしているプラグイン「Crayon Syntax Highlighter」にありました。
更新も5年前からされてはいなかったのですが、便利なので利用し続けていました。
調べてみると、PHP7.4では利用不可となっていましたので、プラグインを無効化にしてみると正常に表示されるようになりました。
ソースコードの表示などに利用するプラグインも新規に「SyntaxHighlighter Evolved」をインストールし、この記事を書いています。
今まで書いていたコマンド等を載せている記事では、ハイライトされず見づらくなったかもしれません…
記事は長くなりましたが、アップデートするだけならそんなに難しくないかと思います。