PHP7.2以降はクオートしない文字列は警告表示されます。

PHP7.2以降 クオートしない文字列は 警告表示されます PHP
スポンサーリンク

人気のレンタルサーバーXserverで、PHP7.2が使用できるようになりました。
(2019.2.2現在、Xserverで使用できる最新バージョンは7.2.6です)

私の所有している別サイト(Wordpressじゃないサイト)は、PHP7.1.18を使用していていたので、軽い気持ちで「PHP7.2.6」に切り替えてみました。(Xserver推奨)

php7.2.6

ところが、PHP切り替え後にサイトを開いてみると警告表示が(汗)

Warning: Use of undefined constant pdo – assumed ‘pdo’ (this will throw an Error in a future version of PHP) in /home/……

スポンサーリンク

なぜ警告文が出るのか? 原因と解決法。

どうやらPHP7.2以降は、グローバル定数が定義されていない場合は単なる文字列という扱いになるらしいのです。

ちょっと意味がよくわかりませんが、警告が出た行の文字ににシングルクォテーション(’)とかダブルクオテーション(”)とかを挟むと良いみたいです。

$stm = $GLOBALS[pdo] //警告出ます。

$stm = $GLOBALS[’pdox’] //正解でーす。

※表示がずれるので、シングルクォテーションを全角にしてあります。

var_dump(GOHAN); //警告出ます。

var_dump('GOHAN'); //正解でーす。

エラーレベルについて

今回のエラーレベルは「警告レベル」です。
実は今までもこういう記載の仕方は推奨されておらず、注意扱い(E_NOTICE)になっていたようですが、PHP7.2からは注意扱いから1レベル上がり警告扱い(E_WARNING)となりました。

ついでにエラーレベルの定数を説明すると以下のうようになります。

  • E_ERROR  … 重大エラー(PHP止まります)
  • E_WARNING … 警告(警告メッセージ表示されるけどPHP動きます)
  • E_NOTICE  … 注意(警告より軽微なミスで、内部的に認識はされてますが画面表示されず何事もないようにPHP動きます)

※ エラーレベルによって画面表示するかしないかは、設定によって変わってきますがデフォルトでは大体こんな感じです。
※ 設定は、php.ini、httpd.conf、.htaccess、phpファイル内、またはサーバーのコンパネ内で変更することができます。

WordPressで同じ感じの警告が出た場合

自力作成サイトであればコードをいじってサクっと直せるのですが、
もしWordpresサイトを使用していて、原因元がテーマやプラグインの場合、

解決パターンとしては…

  • 作者が直してくれることを祈って待つ。
  • 作者に修正してもらえるようお願いする。
  • 自力で修正する。
  • サーバーのPHPバージョンはいじらない。

もしプラグインやテーマの更新が何年も止まっているような場合、作者が直してくれる確率は低いので、代替プラグインを探すか、PHPのバージョンはそのままにしておいた方が良いかと思います。

コードをいじって自力で直すというパターンもありますが、バージョン管理がややこしくなる場合があるので、あまりオススメではありません。

まとめ

PHP7.2の段階では今回のような警告で済みますが、次のメジャーバージョンアップではエラーになるようなので、今のうちにどうにかしておくのが良いかと思います。

  • 無闇矢鱈にPHPはバージョンアップしない。
  • PHPをバージョンアップした場合は、不具合がないかサイトを必ず確認する。
  • コードは安全で且つ正しく書く。

コメント

タイトルとURLをコピーしました