2026年5月19日
2026年5月19日
WordPressのPHPバージョンをアップグレードする方法
はじめに
WordPressのサイトをPHP 7.4からPHP 8.2にアップグレードしたいがプラグインの互換性が心配・PHPを更新したらサイトが壊れた・複数のWordPressサイトを異なるPHPバージョンで動かしたいといった問題の解決方法を解説します。
症状・原因
- PHP 8.0以降で削除された関数(
each()・create_function()など)を使っているプラグインがある Deprecated警告が大量に発生してログが埋め尽くされている- PHP-FPMのソケットパスが変更されNginxが接続できなくなっている
- 複数PHPバージョンが混在してApache/Nginxがどのバージョンを使うか混乱している
解決手順
ステップ1:PHP互換性チェックを行う
# ✅ 現在のPHPバージョンを確認
php -v
# → PHP 7.4.33 (cli)
wp eval "echo PHP_VERSION;" --path=/var/www/html/
# → 7.4.33
# ✅ PHP Compatibility Checker プラグインで互換性確認
wp plugin install phpcompatibilitywp --activate --path=/var/www/html/
wp eval "
\$result = PHPCompatibilityWP::get_scan_results();
print_r(\$result);
" --path=/var/www/html/ 2>/dev/null
# ✅ WP-CLI の php-compat ツールでスキャン
wp cli check-update --path=/var/www/html/
# ✅ PHP_CodeSniffer + PHPCompatibility で全ファイルをスキャン
composer global require squizlabs/php_codesniffer dealerdirect/phpcodesniffer-composer-installer phpcompatibility/php-compatibility
phpcs --standard=PHPCompatibility \
--runtime-set testVersion 8.2- \
/var/www/html/wp-content/plugins/my-plugin/ 2>&1 | head -30
# → ERROR: Function each() is deprecated since PHP 7.2 and removed since PHP 8.0
# → FOUND 12 ERRORS AND 34 WARNINGS
# ✅ 非推奨関数の使用を一覧
grep -r "each\|create_function\|ereg\|split(" /var/www/html/wp-content/plugins/ | grep "\.php:" | head -20
ステップ2:PHP 8.2をインストールする
# ✅ PHP 8.2 をインストール(Ubuntu)
sudo apt install -y software-properties-common
sudo add-apt-repository -y ppa:ondrej/php
sudo apt update
sudo apt install -y php8.2 php8.2-fpm php8.2-mysql php8.2-xml \
php8.2-curl php8.2-zip php8.2-gd php8.2-mbstring php8.2-intl \
php8.2-imagick php8.2-redis
# ✅ PHP 8.2 のバージョン確認
php8.2 -v
# → PHP 8.2.x
# ✅ PHP-FPM 8.2 を起動
sudo systemctl enable php8.2-fpm
sudo systemctl start php8.2-fpm
sudo systemctl status php8.2-fpm
# → Active: active (running)
# ✅ PHP 8.2 FPM のソケットパスを確認
ls /run/php/
# → php7.4-fpm.sock php8.2-fpm.sock ← 両方のバージョンが動作中
# ✅ wp-config.php で PHP バージョンを確認
php8.2 /usr/local/bin/wp eval "echo PHP_VERSION;" --path=/var/www/html/
# → 8.2.x ← PHP 8.2 で実行確認
ステップ3:NginxをPHP 8.2に切り替える
# ✅ Nginx の PHP-FPM ソケット設定を変更
sudo grep -n "fastcgi_pass" /etc/nginx/sites-available/wordpress.conf
# → 15: fastcgi_pass unix:/run/php/php7.4-fpm.sock;
sudo sed -i 's/php7.4-fpm.sock/php8.2-fpm.sock/g' \
/etc/nginx/sites-available/wordpress.conf
# ✅ 設定を確認
grep "fastcgi_pass" /etc/nginx/sites-available/wordpress.conf
# → fastcgi_pass unix:/run/php/php8.2-fpm.sock;
# ✅ Nginx の設定をテスト・リロード
sudo nginx -t
# → nginx: configuration file /etc/nginx/nginx.conf test is successful
sudo nginx -s reload
# ✅ PHP バージョンが切り替わったか確認
curl -s https://example.com/phpinfo.php | grep "PHP Version" | head -1
# → PHP Version 8.2.x ← 切り替え成功
# ✅ Apache の場合
sudo a2dismod php7.4
sudo a2enmod php8.2
sudo apachectl graceful
# ✅ WordPress が PHP 8.2 で動作しているか確認
wp eval "echo PHP_MAJOR_VERSION . '.' . PHP_MINOR_VERSION;" --path=/var/www/html/
# → 8.2
ステップ4:PHP 8.xの互換性問題を修正する
// ✅ PHP 8.0: 削除された関数の代替
// each() → foreach で代替
// PHP 7.x
reset($array);
while ([$key, $val] = each($array)) { /* ... */ }
// PHP 8.x
foreach ($array as $key => $val) { /* ... */ }
// ✅ PHP 8.0: 型の厳格化(TypeError)
// 文字列を数値として比較する挙動が変わった
// PHP 7.x: 0 == "foo" → true
// PHP 8.0: 0 == "foo" → false
// ✅ PHP 8.1: 非推奨: 関数の必須パラメータの後のオプションパラメータ
// BAD
function my_function($required, $optional = null, $also_required) {}
// GOOD
function my_function($required, $also_required, $optional = null) {}
// ✅ PHP 8.2: 動的プロパティの非推奨
class MyClass {
// PHP 8.2+: 動的プロパティには #[AllowDynamicProperties] が必要
public string $defined_property = '';
}
// 未定義プロパティへの代入は Deprecated
# ✅ PHP 8.2 の Deprecated 警告を確認
grep "Deprecated" /var/log/wordpress/debug.log | head -20
# → PHP Deprecated: Creation of dynamic property
# ✅ プラグインの PHP 8.2 対応を確認
wp plugin list --path=/var/www/html/ --format=csv | head -20
# → 互換性のないプラグインは開発者のサポートページを確認
ステップ5:問題が発生した場合のロールバック
# ✅ PHP 7.4 に切り戻す
sudo sed -i 's/php8.2-fpm.sock/php7.4-fpm.sock/g' \
/etc/nginx/sites-available/wordpress.conf
sudo nginx -s reload
# ✅ PHP 7.4 と 8.2 を複数サイトで使い分ける
# サイトA(PHP 8.2)
cat /etc/nginx/sites-available/site-a.conf
# → fastcgi_pass unix:/run/php/php8.2-fpm.sock;
# サイトB(PHP 7.4 互換性のないプラグイン使用中)
cat /etc/nginx/sites-available/site-b.conf
# → fastcgi_pass unix:/run/php/php7.4-fpm.sock;
# ✅ PHP のデフォルトバージョンを切り替え(CLI)
sudo update-alternatives --set php /usr/bin/php8.2
php -v
# → PHP 8.2.x
# ✅ PHP 8.2 移行後の動作確認チェックリスト
wp core is-installed --path=/var/www/html/
wp plugin list --path=/var/www/html/ | grep -i inactive
wp eval "echo 'All OK: PHP ' . PHP_VERSION;" --path=/var/www/html/
# ✅ ページキャッシュをクリア(PHP変更後)
wp cache flush --path=/var/www/html/
wp transient delete --all --path=/var/www/html/
注意事項
- PHPをアップグレードする前にステージング環境でテストしてください。本番環境でのアップグレードは必ずメンテナンスウィンドウを設けて行い、事前にデータベースとファイルのバックアップを取得してください
- PHP 8.0以降では
strict_types = 1が指定されたファイルへの型不一致の引数渡しがTypeErrorになります。プラグインのエラーログを確認してPHP 8.x対応版が存在するか確認してください
まとめ
PHPバージョンアップグレードの手順は①PHP Compatibility Checkerプラグインとphpcs --standard=PHPCompatibilityでプラグイン・テーマの互換性を事前確認、②add-apt-repository ppa:ondrej/phpでPHP 8.2をインストール・php8.2-fpmを起動・ソケットパスを確認、③Nginxのfastcgi_passソケットパスをphp7.4-fpm.sock→php8.2-fpm.sockに変更・nginx -tでテスト・リロード、④PHP 8.0削除関数(each()等)の代替実装・型の厳格化対応・PHP 8.2動的プロパティの対応、⑤問題発生時はソケットパスを7.4に戻してロールバック・複数バージョンを並行稼働してサイト別に切り替えの手順で移行します。