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

# エラー表示／非表示の設定

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

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

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

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

httpd.confや.htaccessで設定する

```apache
php_flag display_errors off
```

php.iniで設定する

```ini
display_errors = Off
```

# エラー表示レベルの設定

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

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

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

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

httpd.confや.htaccessで設定する

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

php.iniで設定する

```ini
error_reporting = E_ALL & ~E_NOTICE & ~E_DEPRECATED
```

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

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

```ini
error_reporting = E_ALL & ~E_NOTICE
```

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

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

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

```ini
error_reporting = E_COMPILE_ERROR | E_RECOVERABLE_ERROR | E_ERROR | E_CORE_ERROR
```

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

```ini
error_reporting = E_ERROR | E_WARNING | E_PARSE
```

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

```ini
error_reporting = E_ERROR | E_WARNING | E_PARSE | E_NOTICE
```

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

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

```ini
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
```

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

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

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

[PHPのビット演算子](http://php.net/manual/ja/language.operators.bitwise.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 レベルのエラーを含む。                                                               |