PHPのdisplay_errorsを有効にして真っ白画面を回避・・・!

「画面が真っ白になるんです。。。」
と相談が来まして、PHPがエラーしているような気がするものの、画面に何も出ない。。

結論から言うとPHPでエラー表示の設定がされていないことが原因でして、備忘録としてメモを残します。

スポンサーリンク

エラーを画面表示するならdisplay_errors

display_errorsの設定値の確認

画面にエラーを表示するかどうかは、display_errorsという設定値で管理されます。
なので「画面にエラーが表示されないな」と思ったらこの値がどうなっているかをまず確認します。

もし最小限のPHPで動作が確認できるなら、phpinfo()で確認します。

<?php
    phpinfo();
?>

もし上記で確認ができないようなら、コンソール上でphp -iで確認します。

Offになっていた場合、エラーを画面に表示しないという設定になります。
Offが2つ出ているんですが内訳は下記のとおりです。

  • 左のOffは現在実行中のPHPのOn/Off状態、基本右と一致しますが、ini_set関数などで設定値を上書き可能です。こちらの設定をもとにPHPは動作します。
  • 右のOffはPHP全体のOn/Off状態、設定ファイルのパラメータにより、各PHPのデフォルト値として扱われます。

display_errorsの変更

display_errorsの設定値がOffになっていることを確認したら、これをOnにします。
個別のPHPの設定値を変更するか、設定ファイルを変更するか、環境に応じて行います。

個別のPHPで変更する場合

個別のPHPでdisplay_errorsを更新する場合、ini_set関数を使います。

ini_set("display_errors","On");

第一引数に設定パラメータ名、第二引数に値です。

ただこのやり方の場合問題があります。
PHPの構文エラーであるParse Errorが発生した場合、上記の関数が実行される前にエラーしてしまうため、真っ白な画面になってしまいます。

設定ファイルで変更する場合

設定ファイルで更新する場合、php.iniを編集します。

デフォルトでは/etc/php.iniに置いてありますが、もし存在しない場合、phpinfoで確認をするか、

下記のコマンドで場所を確認します。

locate php.ini

vi等で下記のように記述を追加します。※Offがあった場合はOnに変更

display_errors = On

さらに設定を有効にするためにサービスの再読み込みを行います。
PHPのインストール状況によって再読み込みするサービスが異なります。

php-fpmでインストールされている場合は、

systemctl reload php-fpm

そうでない場合は、

systemctl reload httpd

で反映します。

このやり方の場合、スーパーユーザー権限が必要になるのと、隠れていたエラーが表示される関係で不要なエラー表示がされる画面が出てくるかもしれません。

まとめ

デフォルトでOffになっていて、Onでいいんじゃないかしら、、、と思う設定値のひとつ、毎回変更している気がする。。。

スポンサーリンク
おすすめの記事