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()との併用、ログ出力設定と組み合わせることで、環境に最適なエラー管理が可能になります。

