PHPのエラーレベル error_reporting の値とさくらのレンサバ

PHPのプログラムをブラウザから実行した時、まあ、つまり「表示させた」時、画面にPHPのメッセージが表示されることがあります。
メッセージの種類は、インフォメーションだったり、警告だったり、エラーだったりするわけです。

どんな種類であっても、メッセージを表示する/しないの制御ができます。
それが
display_errors
です。Onにすると表示、Offにすると非表示になります。

そして、メッセージの種類のどれを表示するかしないかの指定ができるようになっています。
それが
error_reporting
です。

これらのパラメータを、どこに、どんなふうに記述するのか(apacheのコンフィグ、PHPプログラム内、.htaccess内など)はいろいろありますが、今回はさくらのレンタルサーバーについて、具体的な例で説明します。
PHPは7.3です。

さくらのレンサバのそれぞれの既定値は
display_errors On
error_reporting 4177
です。
しかし、コンパネから1回でもphp.iniを作ってしまうと、phpinfoでは、
error_reporting No Value
になります。んーー、意味がわかりません。
この時も、error_reporting 4177 だと思います。

ちなみに、PHP5.3以上の既定値は、
error_reporting E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED
です。 参照→ https://www.php.net/manual/ja/errorfunc.configuration.php#ini.error-reporting
これは、error_reporting 22519
と書くこともできます。
E_NOTICEなどの定義済みの定数は以下で確認できます。
https://www.php.net/manual/ja/errorfunc.constants.php

E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED が 22519 であること(※1)を確認する方法としては、
さくらのレンサバにSSHで接続して、
php -r 'echo E_ALL & ~E_DEPRECATED & ~E_NOTICE & ~E_STRICT,"\n";'
というコマンドを叩くと確認できます。

というわけで、
PHP5.3以上のさくらのレンサバではない通常のデフォルトの設定をさくらのレンサバに行うにはは、
さくらのコンパネまたはFTPで、DocumentRoot直下のphp.iniへ

display_errors = On
error_reporting = "22519"

と書けばOKです。
くどいですが、さくらの既定値にする場合は、error_reporting 4177 です。

そうなると、4177って何?ということになると思うのですが、

PHP error_reporting の整数値から、どのフラグが有効か可視化できるサービス Peflagger
http://gongo.hatenablog.com/entry/2014/08/25/080235

という素晴らしい記事がありまして、そこの Peflagger ページで確認できます。
4177は
●E_ERROR 1 重大な実行時エラー。これは、メモリ確保に関する問題のように復帰で きないエラーを示します。スクリプトの実行は中断されます。
●E_CORE_ERROR 16 PHPの初期始動時点での致命的なエラー。E_ERRORに 似ているがPHPのコアによって発行される点が違う。
●E_COMPILE_ERROR 64 コンパイル時の致命的なエラー。E_ERRORに 似ているがZendスクリプティングエンジンによって発行される点が違う。
●E_RECOVERABLE_ERROR 4096 キャッチできる致命的なエラー。危険なエラーが発生したが、 エンジンが不安定な状態になるほどではないことを表す。 ユーザー定義のハンドラでエラーがキャッチされなかった場合 (set_error_handler() も参照ください) は、 E_ERROR として異常終了する。
という内容です。

22519は
●E_ERROR 1 重大な実行時エラー。これは、メモリ確保に関する問題のように復帰で きないエラーを示します。スクリプトの実行は中断されます。
●E_WARNING 2 実行時の警告 (致命的なエラーではない)。スクリプトの実行は中断さ れません。
●E_PARSE 4 コンパイル時のパースエラー。パースエラーはパーサでのみ生成されま す。
●E_CORE_ERROR 16 PHPの初期始動時点での致命的なエラー。E_ERRORに 似ているがPHPのコアによって発行される点が違う。
●E_CORE_WARNING 32 (致命的ではない)警告。PHPの初期始動時に発生する。 ●E_WARNINGに似ているがPHPのコアによって発行される 点が違う。
●E_COMPILE_ERROR 64 コンパイル時の致命的なエラー。E_ERRORに 似ているがZendスクリプティングエンジンによって発行される点が違う。
●E_COMPILE_WARNING 128 コンパイル時の警告(致命的ではない)。E_WARNINGに 似ているがZendスクリプティングエンジンによって発行される点が違う。
●E_USER_ERROR 256 ユーザーによって発行されるエラーメッセージ。E_ERROR に似ているがPHPコード上でtrigger_error()関数を 使用した場合に発行される点が違う。
●E_USER_WARNING 512 ユーザーによって発行される警告メッセージ。E_WARNING に似ているがPHPコード上でtrigger_error()関数を 使用した場合に発行される点が違う。
●E_USER_NOTICE 1024 ユーザーによって発行される注意メッセージ。E_NOTICEに に似ているがPHPコード上でtrigger_error()関数を 使用した場合に発行される点が違う。
●E_RECOVERABLE_ERROR 4096 キャッチできる致命的なエラー。危険なエラーが発生したが、 エンジンが不安定な状態になるほどではないことを表す。 ユーザー定義のハンドラでエラーがキャッチされなかった場合 (set_error_handler() も参照ください) は、 E_ERROR として異常終了する。PHP 5.2.0 より
●E_USER_DEPRECATED 16384 ユーザー定義の警告メッセージ。これは E_DEPRECATED と同等だが、 PHP のコード上で関数 trigger_error() によって作成されるという点が異なる。PHP 5.3.0 より
です。
※1に書いてあるのとちがうじゃん...ですが、
※1は E_ALL から E_NOTICE E_STRICT E_DEPRECATED の3つをオフにする書き方で、結果は同じです。

最後に、お役立ちパターンをいくつかご紹介して、おしまいにします。
E_ALL & ~E_DEPRECATED & ~E_NOTICE & ~E_STRICT & ~E_WARNING → 22517
E_ALL & ~E_DEPRECATED & ~E_NOTICE & ~E_WARNING → 24565
E_ALL & ~E_NOTICE & ~E_WARNING → 37757

error_reporting_value.png

ぐっどらっこ。