はじめに
実務にて、あるページが真っ白で何も表示されない、または「このページは動作していません(HTTP ERROR 500)」と表示されるので、PHP プログラムの全てのエラーと警告と注意を画面に表示させて調査してほしいという小仕事の依頼があり、それを解決した情報になります。
ソースコード
PHP
ini_set('display_errors', '1');
error_reporting(E_ALL);
php.ini
display_errors = On
.htaccess
php_flag display_errors on
httpd.conf
php_flag display_errors on
検証環境
解説
PHP で設定する場合
ini_set() で エラーおよびロギング設定オプション にある display_errors の値を設定して、エラーを HTML 出力の一部として画面に出力するように定義します。
ini_set('display_errors', '1');
注意!display_errors の設定値は string(文字列)です。declare 文を用いて strict_types が宣言されている場合、設定値が integer(整数)だと HTTP ERROR 500 が発生します。
declare(strict_types = 1);
ini_set('display_errors', 1); // HTTP ERROR 500
次は、error_reporting() で出力する PHP エラーの種類を設定します。
全ての PHP エラーを表示するには、引数に 定義済みの定数 の E_ALL を渡します。
error_reporting(E_ALL);
trigger_error() でユーザーエラーを生成して、全ての PHP エラーが正常に表示されているか確認しましょう。
ini_set('display_errors', '1');
error_reporting(E_ALL);
trigger_error('E_NOTICE', E_USER_NOTICE);
trigger_error('E_WARNING', E_USER_WARNING);
trigger_error('E_ERROR', E_USER_ERROR);
php.ini で設定する場合
php.ini ファイルで設定する場合は下記の記述になります。
display_errors = On
.htaccess で設定する場合
.htaccess ファイルで設定する場合は下記の記述になります。
php_flag display_errors on
httpd.conf で設定する場合
httpd.conf ファイルで設定する場合も下記の記述になります。
php_flag display_errors on
以上です。
おわりに
引き継いだシステムのプログラムにて、全てのエラーを表示する設定にしたところ、警告と注意が数千件以上も発生しており、書き出されていたエラーログファイル(約 10 GB)がサーバーのディスク容量を圧迫していたことがありました。
やんごとなき事情により臭いものに蓋をするエンジニアもいるので、エラーの表示設定を知っているとこのような時限爆弾の被害を最小限に留めることができます。