PHP 8.3 から 8.4 で動かなくなる主な変更|移行前のチェック
PHP 8.3 から 8.4 へ上げると動かなくなりやすい変更を、php.net の移行ガイドから抜き出した。確認のしかたと手順つき。
PHP 8.3 から 8.4 へ上げると、古いプラグインや古い書き方のプログラムが動かなくなることがある。php.net の移行ガイドから、実際のサイトで問題になりやすいものだけを抜き出した。
この記事の要点
E_STRICTの定数が非推奨- 一部の拡張で
is_resource()の判定が効かない - OPcache の JIT の既定値が変わった
- PHPCompatibility で事前に調べられる
PHP 8.3 から 8.4 で変わること
E_STRICTの定数が非推奨- DBA・ODBC・SOAP の一部で
is_resource()の判定が効かない round()に無効な mode を渡すと ValueError- OPcache の JIT の既定値が変わった(
opcache.jitを明示する) str_getcsv()の区切り文字などの長さの確認が厳しくなった
動かなくなっていないか調べる方法
| 方法 | やること |
|---|---|
| 機械で調べる | PHPCompatibility(PHP_CodeSniffer のルール)でプログラムを調べる |
| テスト環境で動かす | 新しい PHP で動かし、エラーと警告をすべて出して確かめる |
| WordPress | 本体・プラグイン・テーマを最新にしてから試す |
警告は先に見ておく
テスト環境では error_reporting(E_ALL) と display_errors を有効にして、警告をすべて出す。本番では画面に出さず、ログで確かめる。
移行の手順
- サイトのファイルとデータベースを、まるごとバックアップする
- 上の変更に当てはまる書き方がないか調べる
- テスト環境で新しい PHP に切り替えて試す
- 本番を切り替え、トップ・フォーム・管理画面を確かめる
- おかしければ、すぐ元の版に戻す
よくある質問
8.3 から 8.4 は大きな変更がある?
7.4→8.0 ほど大きくはない。ただし E_STRICT や OPcache の JIT の設定など、設定ファイル側の見直しが必要なことがある。
JIT を使っていたが、8.4 で効かなくなった
8.4 から既定値が opcache.jit=disable に変わった。JIT を使うなら opcache.jit を明示して設定する。
参考にした情報
- php.net(2026年10月21日のセキュリティ告知)
- php.net:Supported Versions
- php.net:Unsupported Branches
- php.net:付録(移行ガイド)
この記事の情報
2026年10月22日時点の公開情報にもとづく。最新は php.net と、利用中のサーバー会社の告知を確認すること。
PHP のバージョンとサーバー会社を選ぶだけで、危険度と今やることが分かる。移行の相談もできる。
無料で診断する