47

私のローカル開発環境では、PHP バージョン 5.3.3-1ubuntu9.2 を使用しています。

error_reporting を見ると、値は 22527 です。

22527とは?

http://www.php.net/manual/en/errorfunc.constants.phpを確認しましたが、番号が見つかりませんでした。

誰がそれが何であるか教えてもらえますか?

E_ALL | に変更する必要がありますか? E_STRICT ?

前もって感謝します。

4

4 に答える 4

68

この値は、実際にはbitmap maskであり、定数の合計です。

したがって、22527 は

  16384 E_USER_DEPRECATED
+
  4096  E_RECOVERABLE_ERROR
+
  etc...

あなたの場合E_ALL & ~E_DEPRECATEDは、を除くすべてのエラーが表示されますE_DEPRECATED

5.4 より前の PHP バージョンもE_STRICTエラーを除外します (それより前のバージョンにE_STRICTは含まれていないため)。E_ALL

于 2011-01-13T08:43:48.040 に答える
44

この値は、これらの定数の 1 つ以上をビットごとに ored したものです。

phpinfo()通常、INI ファイル内で使用される定数または省略形の代わりに数値を表示します。値を定数に戻す例を次に示します。

<?php
$error_reporting_value = 22527;
$constants = array(
    "E_ERROR",
    "E_WARNING",
    "E_PARSE",
    "E_NOTICE",
    "E_CORE_ERROR",
    "E_CORE_WARNING",
    "E_COMPILE_ERROR",
    "E_COMPILE_WARNING",
    "E_USER_ERROR",
    "E_USER_WARNING",
    "E_USER_NOTICE",
    "E_STRICT",
    "E_RECOVERABLE_ERROR",
    "E_DEPRECATED",
    "E_USER_DEPRECATED",
    "E_ALL"
);
$included = array();
$excluded = array();
foreach ($constants as $constant) {
    $value = constant($constant);
    if (($error_reporting_value & $value) === $value) {
        $included[] = $constant;
    } else {
        $excluded[] = $constant;
    }
}
echo "error reporting " . $error_reporting_value . PHP_EOL;
echo "includes " . implode(", ", $included) . PHP_EOL;
echo "excludes " . implode(", ", $excluded) . PHP_EOL;

出力:

error reporting 22527
includes E_ERROR, E_WARNING, E_PARSE, E_NOTICE, E_CORE_ERROR, E_CORE_WARNING, E_COMPILE_ERROR, E_COMPILE_WARNING, E_USER_ERROR, E_USER_WARNING, E_USER_NOTICE, E_RECOVERABLE_ERROR, E_USER_DEPRECATED
excludes E_STRICT, E_DEPRECATED, E_ALL
于 2011-01-13T08:41:27.120 に答える
3

数値の意味は変更される可能性がありますが、定数 (E_ALL、E_STRICT など) の意味は変更されない可能性が高いため、エラー レポートの設定に数値を使用しないでください。

新しい error_reporting レベル。ビットマスクまたは名前付き定数のいずれかを取ります。将来のバージョンとの互換性を確保するために、名前付き定数を使用することを強くお勧めします。エラー レベルが追加されると、整数の範囲が増加するため、古い整数ベースのエラー レベルが常に期待どおりに動作するとは限りません

(PHP 5.4 以降、E_ALL には E_STRICT が含まれることに注意してください)

永遠に最も厳密な報告が必要な場合は、error_reporting を非常に大きな数に設定して、すべてのエラーを永久に報告することを保証 (?) することができます

httpd.conf のように、PHP の外部で PHP 定数を使用しても意味がないため、そのような場合は整数値が必要です。また、エラー レベルは時間の経過とともに追加されるため、(E_ALL の) 最大値は変更される可能性があります。したがって、E_ALL の代わりに、2147483647 のような数値(E_ALL だけでなく、すべてのエラーを含む) のような、より大きな値を使用して、現在および将来のすべてのビット フィールドをカバーすることを検討してください。

php.ini で、人間が判読できる PHP 定数形式の error_reporting の値を確認してください。phpinfo() 関数は、定数を表示するのではなく、常に数値を表示するように見えます。

しかし、個人的には、php.ini をエラー報告用のデフォルト値のままにしておきます。代わりに、エラー報告機能を、現在取り組んでいる php スクリプトの一番上に配置して、デフォルトをオーバーライドします。例えば:

error_reporting(E_ALL | E_STRICT);
于 2012-05-17T05:30:02.163 に答える