error_reporting - PHP エラー出力レベルについて
- 公開日
- カテゴリ:Basics
- タグ:PHP,php_ini,error_reporting

Contents
error_reporting
PHP ではエラーを出力するレベル(error_reporting)を設定することができます。
設定したエラー出力レベルによって、そのレベルのエラーや警告のメッセージが出力されます。
推奨されていない記述や動作不良の原因を発見する助けになる反面、何でもかんでも出力しているとログの肥大化や出力のリソースを消費する事になるので、開発時、そして本番運用時のエラー出力レベルは必要に応じて適切に設定する必要があります。
error_reporting の設定方法
エラー出力レベルの設定方法は2つあります
設定ファイル(php.ini)に記述する
最も一般的な方法は、設定ファイル(php.ini)に記述することです。
php.ini には既に error_reporting が設定されており、ここを変更することでエラー出力レベルの設定を行います。
error_reporting = E_ALL
php.ini の場所
設定ファイルの場所は環境によって異なりますが、設置箇所を調べる方法がいくつかあります。例えばコンソールから以下の php コマンドを叩くと、php.ini の場所を確認することができます。
# php.ini の場所を確認する
php --ini
# 実行結果
$ php --ini
Configuration File (php.ini) Path: /usr/local/etc/php
Loaded Configuration File: /usr/local/etc/php/php.ini
Scan for additional .ini files in: /usr/local/etc/php/conf.d
Additional .ini files parsed: /usr/local/etc/php/conf.d/app-php.ini,
PHP ファイルに記述する
スクリプトファイルに設定することも可能です。
error_reporting
https://www.php.net/manual/ja/function.error-reporting.php
こちらの方法に関しては、レベルの適用が限定的になる(記述したところに係るところだけ)事や管理が煩雑になる事から、昨今ではほとんど使用されていないと思います。
アプリケーションを動作させるコードではないので、基本的には php.ini に記述して管理する事が望ましいと思います。
エラー出力レベル(定数)
error_reporting の設定値に関しては定数が用意されており、基本的にはこれを使って設定します。
E_ALL すべてのエラーと警告 (PHP 5.4.0 以降では E_STRICT を含む)
- E_ERROR
- 実行時の致命的なエラー
- E_RECOVERABLE_ERROR
- 実行時のキャッチ可能な致命的なエラー
- E_WARNING
- 実行時の警告(致命的ではないエラー)
- E_PARSE
- コンパイル時のパース(解析)エラー
- E_NOTICE
- 実行時の通知(警告や意図的な通知)
- E_STRICT
- 実行時の通知(コードの相互運用性と上位互換性を最大限に確保するための PHP からのコード変更提案)
- E_CORE_ERROR
- PHP の初期起動時に発生する致命的なエラー
- E_CORE_WARNING
- PHP の初期起動時に発生する警告 (致命的ではないエラー)
- E_COMPILE_ERROR
- コンパイル時の致命的なエラー
- E_COMPILE_WARNING
- コンパイル時の警告 (致命的でないエラー)
- E_USER_ERROR
- ユーザーが生成したエラーメッセージ
- E_USER_WARNING
- ユーザーが生成した警告メッセージ
- E_USER_NOTICE
- ユーザーが生成した通知メッセージ
- E_DEPRECATED
- PHPの将来のバージョンで機能しないコードを警告
- E_USER_DEPRECATED
- ユーザーが生成した非推奨の警告 それぞれのレベルの詳細な説明は公式ドキュメントを参照
http://php.adamharvey.name/manual/ja/errorfunc.constants.php
エラー出力レベルのより詳細な設定
エラー出力レベル定数は、ビット演算子を用いる事で AND | OR や 含む・含まないを細かく指定できます。
# 通知系を除く全てのエラー
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
E_ALL から、E_DEPRECATED と E_STRICT の出力は除外するという意味になります。
開発用と本番用の設定
php.ini には、本番用(php.ini-production)と開発用(php.ini-development)が用意されていて、error_reporting はそれぞれ異なっています
# php.ini-production
error_reporting = E_ALL
# php.ini-development
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
冒頭で開発用と本番用の php.ini の error_reporting は適切に設定する必要があると述べましたが、基本的にはこれらを踏襲し、もし変更する必要があれば適宜変更するスタンスで問題ないと思います。