PHP で全てのエラーと警告と注意を HTML に表示させる

はじめに

実務にて、あるページが真っ白で何も表示されない、または「このページは動作していません(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)がサーバーのディスク容量を圧迫していたことがありました。

やんごとなき事情により臭いものに蓋をするエンジニアもいるので、エラーの表示設定を知っているとこのような時限爆弾の被害を最小限に留めることができます。