PHP 8.0 から 8.1 で動かなくなる主な変更|移行前のチェック
PHP 8.0 から 8.1 へ上げると動かなくなりやすい変更を、php.net の移行ガイドから抜き出した。確認のしかたと手順つき。
PHP 8.0 から 8.1 へ上げると、古いプラグインや古い書き方のプログラムが動かなくなることがある。php.net の移行ガイドから、実際のサイトで問題になりやすいものだけを抜き出した。
この記事の要点
- 内部関数に null を渡すと非推奨の警告
- MySQLi が既定で例外を投げる
- PDO が数値を int / float で返す
- PHPCompatibility で事前に調べられる
PHP 8.0 から 8.1 で変わること
- 内部関数に null を渡すと非推奨の警告(
strlen(null)など) htmlspecialchars()などの既定がENT_QUOTES | ENT_SUBSTITUTEに- MySQLi が既定でエラー時に例外を投げる
- PDO(MySQL・SQLite)が数値を文字列でなく int / float で返す
- 必須の引数より前にある、既定値つきの引数は必須扱い
動かなくなっていないか調べる方法
| 方法 | やること |
|---|---|
| 機械で調べる | PHPCompatibility(PHP_CodeSniffer のルール)でプログラムを調べる |
| テスト環境で動かす | 新しい PHP で動かし、エラーと警告をすべて出して確かめる |
| WordPress | 本体・プラグイン・テーマを最新にしてから試す |
警告は先に見ておく
テスト環境では error_reporting(E_ALL) と display_errors を有効にして、警告をすべて出す。本番では画面に出さず、ログで確かめる。
移行の手順
- サイトのファイルとデータベースを、まるごとバックアップする
- 上の変更に当てはまる書き方がないか調べる
- テスト環境で新しい PHP に切り替えて試す
- 本番を切り替え、トップ・フォーム・管理画面を確かめる
- おかしければ、すぐ元の版に戻す
よくある質問
Deprecated の警告は放っておいていい?
今は動くが、将来の版でエラーになる予定。ログで洗い出して直しておく。
MySQLi が急にエラーで止まるようになった
PHP 8.1 から、MySQLi は既定でエラー時に例外を投げる。以前の動きに戻すなら mysqli_report(MYSQLI_REPORT_OFF); だが、例外を受け止めるように直すほうが安全。
参考にした情報
- php.net(2026年10月21日のセキュリティ告知)
- php.net:Supported Versions
- php.net:Unsupported Branches
- php.net:付録(移行ガイド)
この記事の情報
2026年10月22日時点の公開情報にもとづく。最新は php.net と、利用中のサーバー会社の告知を確認すること。
PHP のバージョンとサーバー会社を選ぶだけで、危険度と今やることが分かる。移行の相談もできる。
無料で診断する