2011-01-13 50 views
37

私のローカルdev envではPHPバージョン5.3.3-1ubuntu9.2を使用しています。私がするerror_reporting見たときにerror_reportingで22527とは何かphpinfoの22527

は今、値が22527である何22527.

のですか?

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

誰でも教えてください。

これをE_ALLに変更する必要がありますか? E_STRICT?

ありがとうございます。

+1

代わりに、 'php \ php.ini'ファイルを直接開き、' error_reporting'を見つけることができます。例えば。私のシステムでは、php.ini行535は 'error_reporting = E_ALL&〜E_DEPRECATED&〜E_STRICT'と書いています – Pacerier

答えて

52

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

ので、22527はあなたのケースで

16384 E_USER_DEPRECATED 
+ 
    4096 E_RECOVERABLE_ERROR 
+ 
    etc... 

それは(E_STRICTE_ALLに含まれていないので)それは

+5

PHP 5.4.0以来、 'E_STRICT'は' E_ALL'の一部になっています。 – gustyaquino

29

この値は、these constantsビット単位で1つ以上です。

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 
+1

E_ALLはどうしてそこにありますか? php.iniファイルで –

+0

は、私は追加のerror_reporting = 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と私はerror_reportingの を取得&0 – themis

+0

&ビット演算、ではありませんブール演算。あなたは100&010&001のような何かを000で実行しています。 – tschwab

3

に数値を使用しないでくださいE_DEPRECATEDE_STRICT除いて、すべてのエラーが表示されます、E_ALL & ~E_DEPRECATEDだがありますmeaning of that value can changeというエラー報告を設定しますが、定数の意味(E_ALL、E_STRICTなど)はそうではありません:

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

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

あなたは永遠に厳しい報告をしたい場合は、保証するために、非常に大きな数にするerror_reporting設定することができます(?)そのyou will report all errors forever

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

あなたのPHPをチェックしてください。人間が読めるPHP定数形式のerror_reportingの値はiniです。 phpinfo()関数は、定数を表示するのではなく常に数値を表示するように見えます。

私は個人的に、エラー報告のデフォルト値をphp.iniのままにしています。代わりに、私はデフォルトの設定を上書きするために、私が作業しているPHPスクリプトの先頭にエラー報告機能を追加します。たとえば、

+0

興味深いことに、私は0x7FFFFFFFが素数であることを認識しませんでした! –

+0

かなり変だよね? –

+1

しかし、** 0 ** **は、より多くのエラー報告レベルが追加されても、常に「すべてをオフにする」ことを指しますか? – Pacerier

関連する問題