「this will throw an Error in a future version of PHP」の直し方(PHP 8 では Fatal error でサイトが止まる)

広告WordPress・PHP を学べる本

Amazonのアソシエイトとして、WordPress functions.phpは適格販売により収入を得ています。

概要説明

PHP 7 の Warning「Use of undefined constant xxx - assumed 'xxx' (this will throw an Error in a future version of PHP)」は、PHP 8 では Fatal error になりサイトが止まる。原因(クォートのない配列のキー・全角スペース)と直し方、grep での探し方。

PHP 7.2〜7.4 では、次の Warning が出ます。

Warning: Use of undefined constant xxx - assumed 'xxx' (this will throw an Error in a future version of PHP)

「将来の PHP ではエラーになる」という予告です。その将来が PHP 8 で、同じ書き方は次の Fatal error になり、そこで処理が止まります。

Fatal error: Uncaught Error: Undefined constant "xxx"

PHP 7 のときに Warning が出ていたのに直していないと、サーバーの PHP を 8 に上げたとたんに、サイトが真っ白になったり、「重大なエラー」が出たりします。

PHP 7 の Warning の段階では表示は続きますが、PHP 8 では止まります。PHP のバージョンを上げる前に、エラーログにこの Warning が出ていないかを確かめて直しておきます。

xxxが空白の場合

ソース内に全角スペースが使用されている可能性がある

xxxがidの場合

idを指定する際にシングルクオーテーションを使っていない可能性がある

警告・エラーになる書き方

// 配列のキーにクォートがない(id が「定数」として読まれる)
echo get_permalink( $atts[id] );

// 全角スペースが入っている(=> のあとの空白が全角)
$args = array( 'id' => 117 );
echo get_permalink( $atts['id'] ); // キーはクォートで囲む

$args = array( 'id' => 117 ); // 空白は半角にする

テーマやプラグインのファイルから、同じ書き方を探すときは、サーバーの SSH(ターミナル)で grep を使います。

ターミナル
# クォートのない配列のキー($atts[id] のような書き方)を探す
grep -rnE '\$[A-Za-z_][A-Za-z0-9_]*\[[A-Za-z_][A-Za-z0-9_]*\]' --include=*.php wp-content/themes/テーマのフォルダ

# 全角スペースを探す
grep -rn " " --include=*.php wp-content/themes/テーマのフォルダ
  • 1 つ目は、$atts[id] のように、配列のキーがクォートで囲まれていない所を探します。定数をキーにしている所($a[PHP_EOL] など)も出るので、1 つずつ見て直します。
  • 2 つ目のかぎかっこの中は全角スペースです。全角スペースは画面では見分けにくいので、grep で探すのが確実です。
  • PHP の構文チェック(php -l)では見つかりません(動かしたときに分かるエラーのため)。

確かめた結果

同じファイルを PHP 7.3 と PHP 8.3 で動かしました。

書き方 PHP 7.3 PHP 8.3
$atts[id] Warning(’id’ として続ける) Fatal error: Undefined constant “id”(止まる)
=> のあとに全角スペース Warning(「 117」という文字として続ける) Fatal error: Undefined constant “ 117″(止まる)

上の 2 つの grep で、どちらの行も見つかりました。

エラーログを見る

Warning は画面に出ないことが多いので、エラーログで見つけます。WordPress のエラーを debug.log に書くには、wp-config.php に次のように書きます(「That’s all, stop editing!」の行より上)。

wp-config.php
// エラーを画面に出さず、wp-content/debug.log に書く
define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', false );

このサイトでは、Error Log Monitor プラグインで、ダッシュボードからエラーログを見ています。ただし、2026 年 10 月の時点で最後の更新が 2025 年 10 月で、動作確認は WordPress 6.8 までです。使うときは、更新の状況を確かめてください。

PHP のバージョンを上げるときや、エラーで表示されなくなったときのご相談は、こちらでも受けています。

ログの確認について

関連機能

  1. PHP 8 で空の文字と 0 の比べ方が変わり、カテゴリーのボタンが消えた:文字と数の比べ方の変更と、テーマの直し方

  2. post-receive フックを別のサイトに使い回す:コピーしたら置き換える値を全部挙げ、全部の行を見る

  3. debug.log が 100MB を超えていた:中身の数え方と、記録を止めるまでの手順

サイドバー

よく使うカスタマイズ

最近の記事

Profile

PAGE TOP