Help us understand the problem. What is going on with this article?

PHPのエラー表示設定について

エラー表示/非表示の設定

PHPファイルで設定する(1)

<?php
// エラーを出力する
ini_set('display_errors', "On");
?>

PHPファイルで設定する(2)

<?php
// エラーを出力する
ini_set( 'display_errors', 1 );
?>

httpd.confや.htaccessで設定する

php_flag display_errors off

php.iniで設定する

display_errors = Off

エラー表示レベルの設定

PHPファイルで設定する(1)

<?php
error_reporting(E_ALL & ~ E_DEPRECATED & ~ E_USER_DEPRECATED & ~ E_NOTICE);
?>

PHPファイルで設定する(2)

<?php
ini_set('error_reporting', E_ALL);
?>

httpd.confや.htaccessで設定する

# E_ALL 等はPHPの定数で .htaccess では使えないため数字に変換する
# E_ALL & ~E_NOTICE & ~E_DEPRECATED は10進数で 6135
php_value "error_reporting" 6135

php.iniで設定する

error_reporting = E_ALL & ~E_NOTICE & ~E_DEPRECATED

よく設定するエラー表示レベル

E_NOTICE(注意メッセージ)以外の全てのエラーを表示する。

error_reporting = E_ALL & ~E_NOTICE

E_NOTICE(注意メッセージ)とE_DEPRECATED(推奨エラー)は表示しない。

error_reporting = E_ALL & ~ E_DEPRECATED & ~ E_USER_DEPRECATED & ~ E_NOTICE

致命的なエラーのみ表示する。

error_reporting = E_COMPILE_ERROR | E_RECOVERABLE_ERROR | E_ERROR | E_CORE_ERROR

実行時エラーのみ表示する。

error_reporting = E_ERROR | E_WARNING | E_PARSE

実行時エラー+注意メッセージ

error_reporting = E_ERROR | E_WARNING | E_PARSE | E_NOTICE

エラー表示レベルの書き方と意味

よくある設定の「E_NOTICE 以外の全てのエラーを表示する」は...

error_reporting = E_ALL & ~E_NOTICE

ビットで表すと...

0111 1111 1111 1111 and not( 0000 0000 0000 1000 )

notを反転すると...

0111 1111 1111 1111 and 1111 1111 1111 0111

andで統合(両方1の場合だけ1に)すると...

0111 1111 1111 0111

10進法に変換すると...

32759

つまり以下はいずれも同じ意味。

error_reporting = E_ALL & ~E_NOTICE
error_reporting = 32759
error_reporting = E_ALL ^ E_NOTICE

詳しくはPHPマニュアルのビット演算子を確認してください。

PHPのビット演算子

エラーレベルの定数

エラーレベルの定数は以下で設定されています。

定数 bit エラーレベル
E_ERROR 1 0000 0000 0000 0001 実行時の重大なエラー。復帰できないエラー。
E_WARNING 2 0000 0000 0000 0010 実行時の(致命的ではない)警告。
E_PARSE 4 0000 0000 0000 0100 コンパイル時のパースエラー。
E_NOTICE 8 0000 0000 0000 1000 注意メッセージ。
E_CORE_ERROR 16 0000 0000 0001 0000 PHPの初期始動時点での致命的なエラー。
E_CORE_WARNING 32 0000 0000 0000 0001 PHPの初期始動時点での(致命的ではない)警告。
E_COMPILE_ERROR 64 0000 0000 0100 0000 コンパイル時の致命的なエラー。
E_COMPILE_WARNING 128 0000 0000 1000 0000 コンパイル時の警告(致命的ではない)。
E_USER_ERROR 256 0000 0001 0000 0000 trigger_error()関数で発行されるE_ERROR(重大エラー)。
E_USER_WARNING 512 0000 0010 0000 0000 trigger_error()関数で発行されるE_WARNING(警告)。
E_USER_NOTICE 1024 0000 0100 0000 0000 trigger_error()関数で発行されるE_NOTICE(注意)。
E_STRICT 2048 0000 1000 0000 0000 互換性を維持するために非推奨とされる記述。PHP 5 以上、7 未満
E_RECOVERABLE_ERROR 4096 0001 0000 0000 0000 キャッチできる致命的なエラー。PHP 5.2.0 以上
E_DEPRECATED 8192 0010 0000 0000 0000 将来のバージョンで動作しなくなる非推奨コード。PHP 5.3.0 以上
E_USER_DEPRECATED 16384 0100 0000 0000 0000 trigger_error()関数で発行されるE_DEPRECATED(非推奨コード)。
E_ALL(PHP 5.2.0未満) 2047 0000 0111 1111 1111 サポートされる全てのエラーと警告。E_STRICT レベルのエラーは除く。
E_ALL(PHP 5.2.x) 6143 0001 0111 1111 1111
E_ALL(PHP 5.3.x) 30719 0111 0111 1111 1111
E_ALL(PHP 5.4.x) 32767 0111 1111 1111 1111 サポートされる全てのエラーと警告。E_STRICT レベルのエラーを含む。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした