RitoLabo

error_reporting - PHP エラー出力レベルについて

  • 公開:
  • カテゴリ: PHP Basics
  • タグ: PHP,php_ini,error_reporting

アジェンダ
  1. error_reporting
  2. error_reporting の設定方法
    1. 設定ファイル(php.ini)に記述する
        php.ini の場所
    2. PHP ファイルに記述する
  3. エラー出力レベル(定数)
  4. エラー出力レベルのより詳細な設定
  5. 開発用と本番用の設定

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 は適切に設定する必要があると述べましたが、基本的にはこれらを踏襲し、もし変更する必要があれば適宜変更するスタンスで問題ないと思います。