
きっかけ
久々にWordPressのダッシュボードを開いたところ、次の警告が表示されていました。
PHPの更新を推奨
このサイトは古いバージョンのPHP(7.4.30)を実行しており、セキュリティアップデートを受け取れません。更新する必要があります。
管理画面上でここまで明確に出ているので、後回しにせずアップグレード対応を進めました。
設定内容やプログラムの内容は、用途・環境に応じて適切なものが変わります。
各種設定値や環境情報についてよく理解を深め、壊れても良い環境でくまなく検証してください。
なるべく正確に書くように心掛けていますが、本投稿内容を実施される際には自己責任の下でお願い致します。
作業環境
- 仮想基盤: Proxmox上の仮想マシン
- 仮想マシン上のOS: Debian 11.1
実施前にやったこと
アップグレード前は、以下を先に実施しました。
- Proxmoxで対象VMのスナップショットを取得
- 今回の環境はProxmox上のVMでWordPressを動かしているため、PHP変更前にスナップショットを作成しました。
- こういう時に、仮想化していると便利ですね。
- ファイルとDBのバックアップ
- テーマ・プラグイン・WordPress本体を最新化
- 重要ページ(トップ、投稿、問い合わせ)の動作確認
PHPアップグレードの流れ
今回はDebian VM上での更新として、次の流れで実施しました。
- まず Httpサーバが
nginxとapache2のどちらで動いているうろ覚えなのでどっちかを確定 - 現在のPHPのバージョンを確認(
php -v) - PHPパッケージを更新
- 当初は8.2を目指しましたが、最終的にコマンドライン版は8.5まで上がりました。まあホビー環境だし、新しい分にはヨシッ!ということで進めます。
- プロダクト環境ではな当然こんな事しないです。絶対。ダメ🙅
- 確定したWebサーバー方式に合わせて設定更新
php-fpmまたはlibapache2-mod-php。Web側は8.2で動けばOK!
- Webサーバーを再起動/再読込
- WordPress管理画面へ再ログインして警告解消を確認
具体的なアップデート手順(Debian 11.1 / 実結果ベース)
ここでは PHP 7.4.30 から更新し、最終的にコマンドライン側が PHP 8.5.3 になった実行内容を残しておきます。
今回は、root で実行しますが、状況により各コマンドの先頭に sudo を付けて実行します。
1. Webサーバー種別を確定
久しぶりにこのVM触るので、NginxだったかApacheだったか忘れていたためプロセスとsystemdの状況で確定。
root@wordpress:/home/localadm# ps -ef | grep nginx
root 444 1 0 2月08 ? 00:00:00 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
www-data 445 444 0 2月08 ? 00:00:04 nginx: worker process
root 127243 127217 0 12:45 pts/0 00:00:00 grep nginx
root@wordpress:/home/localadm# ps -ef | grep apache
root 127245 127217 0 12:45 pts/0 00:00:00 grep apache
root@wordpress:/home/localadm# systemctl status apache2 --no-pager -l || true
● apache2.service - The Apache HTTP Server
Loaded: loaded (/lib/systemd/system/apache2.service; disabled; vendor preset: enabled)
Active: inactive (dead)
Docs: https://httpd.apache.org/docs/2.4/
root@wordpress:/home/localadm# systemctl status nginx --no-pager -l || true
● nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
Active: active (running) since Sun 2026-02-08 17:19:45 JST; 6 days ago
Docs: man:nginx(8)
Process: 409 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
Process: 443 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
Main PID: 444 (nginx)
Tasks: 2 (limit: 522)
Memory: 32.6M
CPU: 4.741s
CGroup: /system.slice/nginx.service
├─444 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
└─445 nginx: worker process
nginx が active (running) で apache2 が inactive (dead)かつ、プロセスもnginxが現状動いているっぽいので、今回はNginx 構成と確定。
※余談ですがapache2 が active (running) なら Apache 構成。
2. 事前確認事項
root@wordpress:/home/localadm# php -v
PHP 7.4.30 (cli) (built: Jul 7 2022 15:51:43) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
with Zend OPcache v7.4.30, Copyright (c), by Zend Technologies
root@wordpress:/home/localadm# nginx -V 2>&1 | head -n 1 || true
nginx version: nginx/1.18.0
root@wordpress:/home/localadm#
一応、PHPとnginxのバージョンも確認。
3.PHP8系のPHPパッケージを使えるようにする
Debian 11標準だけだとPHP 7.4系が中心のため、8系のPHPを使う場合はリポジトリ追加が必要っぽいので追加。
root@wordpress:/home/localadm# apt update
取得:1 http://security.debian.org/debian-security bullseye-security InRelease [27.2 kB]
...
24.1 MB を 4秒 で取得しました (6,674 kB/s)
パッケージリストを読み込んでいます... 完了
...
N: Repository 'http://security.debian.org/debian-security bullseye-security InRelease' changed its 'Suite' value from 'stable-security' to 'oldoldstable-security'
N: Repository 'http://deb.debian.org/debian bullseye InRelease' changed its 'Suite' value from 'stable' to 'oldoldstable'
root@wordpress:/home/localadm# apt install -y ca-certificates apt-transport-https lsb-release wget gnupg2
パッケージリストを読み込んでいます... 完了
...
アップグレード: 2 個、新規インストール: 16 個、削除: 0 個、保留: 222 個。
...
gnupg2 (2.2.27-2+deb11u3) を設定しています ...
man-db (2.9.4-2) のトリガを処理しています ...
libc-bin (2.31-13+deb11u2) のトリガを処理しています ...
root@wordpress:/home/localadm# wget -qO /etc/apt/trusted.gpg.d/sury-php.gpg https://packages.sury.org/php/apt.gpg
root@wordpress:/home/localadm# echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list
root@wordpress:/home/localadm# apt update
...
取得:4 https://packages.sury.org/php bullseye InRelease [6,136 B]
取得:5 https://packages.sury.org/php bullseye/main amd64 Packages [288 kB]
...
パッケージリストを読み込んでいます... 完了
Suryリポジトリ追加後の apt update で packages.sury.org/php が取得され、新しいPHP系パッケージを引ける状態になった。
こちらも余談ですが、bullseye の Suite が oldoldstable に変わった旨の通知が出ており、OS自体もそろそろアップグレードの頃合いかなと。。。(別途検討)
4. PHP本体と拡張を導入(開始時は8.2)
WordPressで一般的に使う拡張をまとめて入れます。
root@wordpress:/home/localadm# apt install -y php8.2 php8.2-cli php8.2-common php8.2-mysql php8.2-xml php8.2-curl php8.2-gd php8.2-mbstring php8.2-zip php8.2-intl php8.2-opcache
パッケージリストを読み込んでいます... 完了
...
アップグレード: 2 個、新規インストール: 18 個、削除: 0 個、保留: 233 個。
...
php8.2-cli (8.2.30-3+0~20260213.84+debian11~1.gbp445d4a) を設定しています ...
update-alternatives: /usr/bin/php (php) を提供するために自動モードで /usr/bin/php8.2 を使います
...
php8.2 (8.2.30-3+0~20260213.84+debian11~1.gbp445d4a) を設定しています ...
libc-bin (2.31-13+deb11u2) のトリガを処理しています ...
root@wordpress:/home/localadm#
とりあえず、php8.2 と主要拡張がインストールされ、作業開始時点で /usr/bin/php の代替先が php8.2 に切り替えれたっぽい。libapache2-mod-php8.2 も同時に入っており、php7.4 module already enabled のメッセージが出ている。
今回の実行環境はNginx運用なので、 php-fpm 側を有効化して使う(次の手順)
5. Nginx + PHP-FPMの場合
root@wordpress:/home/localadm# apt install -y php8.2-fpm
パッケージリストを読み込んでいます... 完了
...
php8.2-fpm (8.2.30-3+0~20260213.84+debian11~1.gbp445d4a) を設定しています ...
...
Created symlink /etc/systemd/system/multi-user.target.wants/php8.2-fpm.service → /lib/systemd/system/php8.2-fpm.service.
root@wordpress:/home/localadm# systemctl enable --now php8.2-fpm
root@wordpress:/home/localadm#
Nginx設定(例: /etc/nginx/sites-available/default)を編集し、 fastcgi_pass を新バージョン(今回は php8.2-fpm)のソケットに書き換えます。
# 修正前: fastcgi_pass unix:/run/php/php7.4-fpm.sock;
# 修正後:
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
設定反映:
root@wordpress:/home/localadm# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
root@wordpress:/home/localadm# systemctl restart nginx
root@wordpress:/home/localadm#
php8.2-fpm がインストールされ、systemctl enable --now php8.2-fpm で起動・自動起動設定するところまで完了。
Nginxの fastcgi_pass を unix:/run/php/php8.2-fpm.sock に変更し、nginx -t で構文に問題ないことまで確認。
最後に systemctl restart nginx で反映!
6. 旧PHP 7.4を停止・削除(動作確認後)
問題がないことを確認してから実施します。
root@wordpress:/home/localadm# systemctl disable --now php7.4-fpm || true
Removed /etc/systemd/system/multi-user.target.wants/php7.4-fpm.service.
root@wordpress:/home/localadm# apt purge -y 'php7.4*'
パッケージリストを読み込んでいます... 完了
...
以下のパッケージが新たにインストールされます:
php8.4 php8.4-cli php8.4-common php8.4-curl php8.4-fpm php8.4-intl php8.4-mbstring php8.4-mysql php8.4-opcache
php8.4-readline php8.4-xml php8.4-zip php8.5-cli php8.5-common php8.5-imagick php8.5-phpdbg php8.5-readline
...
update-alternatives: /usr/bin/php (php) を提供するために自動モードで /usr/bin/php8.5 を使います
...
root@wordpress:/home/localadm# apt autoremove -y
apt purge -y 'php7.4*' はグロブ展開の影響で関連メタパッケージの再解決が走り、php8.4 と php8.5 系まで同時導入されたてしまった(´・ω・`)update-alternatives が最終的に /usr/bin/php8.5 を向いたため、最終CLIバージョンは 8.5.3 になった。
CLIとWebでバージョンがズレましたが、個人のブログだし検証要素も強めなだし、むしろ最新版を先取りできたのでヨシッ!とします。
7. 最終確認(CLIバージョンの確認)
CLI(コマンドライン)で使われるPHPバージョンを確認します。
また、WordPressの動作に必須な拡張モジュールが読み込まれているか確認します。 もしここで何も表示されない場合は、そのバージョンの拡張パッケージ(例: php8.5-mysql)が不足している可能性があります。
WordPress管理画面の「サイトヘルス」で、実際に使われているPHPバージョンとエラー有無を確認して完了です。
root@wordpress:/home/localadm# php -v
PHP 8.5.3 (cli) (built: Feb 13 2026 15:51:35) (NTS)
Copyright (c) The PHP Group
...
with Zend OPcache v8.5.3, Copyright (c), by Zend Technologies
root@wordpress:/home/localadm# php -m | grep -E 'mysqli|curl|mbstring|xml|zip|gd|intl'
libxml
最終的なCLI実行バージョンは PHP 8.5.3(お、早いね!)
Web側(8.2)でWordPressが元気に動いているなら、CLIは適宜使うときに考えればOK。ヨシッ!
反映後に確認したこと
アップグレード後は、次をチェックしました。
- ダッシュボードの警告が消えているか
- サイト表示の崩れがないか
- プラグインのエラー(管理画面・フロント)
- フォーム送信やログインなど主要機能
まとめ
今回のようにWordPressの管理画面で「PHP更新推奨」が出たら、対応タイミングです。
今回の作業では、最終的にCLIが 8.5.3、Web側が 8.2 という構成になりました。
「バージョンが揃ってない!」と本番運用する場合は、事故りそうなので合わせる気にもなりますが、個人のホビー環境のWordPressなので、快適に動いてセキュリティ警告が消えれば、それでヨシッ!(←しばらくしたらVMごと再構成予定)
(参考)PHPバージョンを8.5に揃える場合
もし「やっぱり揃えたいな」と思ったら、以下の手順でサクッと統一するので、その時用のメモ(実行してないのであっているかは不明)
# PHP 8.5 FPMと拡張のインストール
apt install -y php8.5-fpm php8.5-mysql php8.5-xml php8.5-curl php8.5-gd php8.5-mbstring php8.5-zip php8.5-intl
# Nginx設定の書き換え
# fastcgi_pass unix:/run/php/php8.2-fpm.sock; -> unix:/run/php/php8.5-fpm.sock;
# 反映
systemctl enable --now php8.5-fpm
systemctl restart nginx