【サクッと解説】PHP error_reportingでエラーレベルを制御する方法

目次

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
<?php
// すべてのエラーを表示する
error_reporting(E_ALL);
ini_set('display_errors', '1');

// 通常の注意メッセージも表示される
echo $undefined_var; // Notice: Undefined variable
?>

E_ALLは現在定義されているすべてのエラーレベルを含む定数です。ini_set('display_errors', '1')も併用しないと、ブラウザには表示されません。

本番環境で非表示にする設定

本番環境では、ユーザーにエラー内容を見せないようにします。

PHP
<?php
// 致命的なエラー以外は報告しない
error_reporting(0);
ini_set('display_errors', '0');
?>

このようにすることで、セキュリティやUXの観点からも望ましい状態にできます。

特定のエラーレベルのみ除外する

非推奨機能(E_DEPRECATED)の警告だけを除外したい場合の例です。

PHP
<?php
// 非推奨警告だけを除外する
error_reporting(E_ALL & ~E_DEPRECATED);
?>

ビット演算子 ~ は否定を意味し、& は除外を意味します。複数のエラーを除外したい場合は | を使って組み合わせます。

PHP
<?php
// E_NOTICE と E_DEPRECATED を除外
error_reporting(E_ALL & ~(E_NOTICE | E_DEPRECATED));
?>

エラー報告レベルの確認

現在のエラーレベル設定を確認するには、以下のように記述します。

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

よかったらシェアしてね!
  • URLをコピーしました!
目次