「画面が真っ白になるんです。。。」
と相談が来まして、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でいいんじゃないかしら、、、と思う設定値のひとつ、毎回変更している気がする。。。