1. 本記事のポイント
- PHPのエラー出力レベルを細かく制御できる
error_reporting()
関数の使い方を解説 - 実行環境や運用段階に応じた適切な設定方法を紹介
- 開発・本番での使い分けや、非推奨警告の制御方法も含めて網羅
2. PHPのerror_reportingとは?
PHPにおけるerror_reporting()
関数は、スクリプト内で表示・記録するエラーの種類(レベル)を制御するための関数です。
エラーには、実行時エラー、警告、注意、非推奨機能の通知など複数のレベルがあり、それぞれ定数で表現されます(例:E_ERROR
, E_WARNING
, E_NOTICE
, E_DEPRECATED
など)。error_reporting()
を使うことで、特定のエラータイプだけを表示させることが可能です。
開発環境では詳細なエラーをすべて出力して問題の早期発見を図り、本番環境では致命的なエラー以外は非表示にするなど、環境に応じた切り替えが一般的です。
PHPの設定ファイル(php.ini)でも同様の設定は可能ですが、error_reporting()
はスクリプト内で個別制御できる点が特長です。
3. 詳細解説
開発時にすべてのエラーを表示する設定
デバッグ中の開発環境では、すべてのエラーを表示することが望まれます。
<?php
// すべてのエラーを表示する
error_reporting(E_ALL);
ini_set('display_errors', '1');
// 通常の注意メッセージも表示される
echo $undefined_var; // Notice: Undefined variable
?>
E_ALL
は現在定義されているすべてのエラーレベルを含む定数です。ini_set('display_errors', '1')
も併用しないと、ブラウザには表示されません。
本番環境で非表示にする設定
本番環境では、ユーザーにエラー内容を見せないようにします。
<?php
// 致命的なエラー以外は報告しない
error_reporting(0);
ini_set('display_errors', '0');
?>
このようにすることで、セキュリティやUXの観点からも望ましい状態にできます。
特定のエラーレベルのみ除外する
非推奨機能(E_DEPRECATED
)の警告だけを除外したい場合の例です。
<?php
// 非推奨警告だけを除外する
error_reporting(E_ALL & ~E_DEPRECATED);
?>
ビット演算子 ~
は否定を意味し、&
は除外を意味します。複数のエラーを除外したい場合は |
を使って組み合わせます。
<?php
// E_NOTICE と E_DEPRECATED を除外
error_reporting(E_ALL & ~(E_NOTICE | E_DEPRECATED));
?>
エラー報告レベルの確認
現在のエラーレベル設定を確認するには、以下のように記述します。
<?php
var_dump(error_reporting());
?>
この関数は現在の設定値(整数)を返します。
4. よくあるミス・誤解・落とし穴
error_reporting()
を設定しても、display_errors
が有効でなければブラウザに表示されないphp.ini
の設定が上書きされていることに気づかず、スクリプトのerror_reporting()
が効かないケースがある- 本番環境で
E_ALL
を有効にしたままにしてしまい、システムの内部情報がユーザーに漏れる E_STRICT
は PHP 5.4 以降ではE_ALL
に含まれるようになっているが、古いバージョンでは別扱いのため注意が必要
また、ログ出力の設定(log_errors
, error_log
)を併用しないと、非表示エラーが検知できないままになることもあります。
5. まとめ
error_reporting()
は、PHPのエラー出力を柔軟に制御できる基本的かつ重要な関数です。
開発時にはE_ALL
で詳細な情報を得られる一方、本番環境では0または限定的なレベルで安全に運用すべきです。
ビット演算による個別制御や、ini_set()
との併用、ログ出力設定と組み合わせることで、環境に最適なエラー管理が可能になります。