PHP 5が厳格な標準エラーを無効にする


175

厳格な基準でエラー報告を無効にするには、PHPスクリプトを上部に設定する必要があります。

誰か助けてもらえますか?


8
@ 451F:ここでのキーワードは「厳しい基準」だと思います。以前のバージョンについては知りませんが、PHP 5.4.0では、エラーレポートをE_ALL & ~E_DEPRECATED & ~E_STRICTプロダクション用に設定することをお勧めします。厳格な標準を無効にすることを提案していることに注意してください。
フェイクコードモンキーラシード2011

また、php.iniファイルを見つけて、/ usr / local / php5 / lib /にコピーします
yadhu

回答:


185

エラー報告を無効にしますか、それともユーザーに表示されないようにしますか?本番サイトであっても、通常はエラーをログに記録することをお勧めします。

# in your PHP code:
ini_set('display_errors', '0');     # don't show any errors...
error_reporting(E_ALL | E_STRICT);  # ...but do log them

error_logエラーは標準のシステムログに記録されるか、またはディレクティブを使用してエラーの移動先を正確に指定します。


11
明白なことを明確に述べるためだけです:もちろんphp.ini、PHPコードを変更できない場合など、ファイルにこれらを設定することもできます。
sschuberth 2013

1
ただし、本番環境で厳密なエラーを記録することも悪い習慣です。重要ではない可能性が高い通知をログに記入するため、次の問題の1つまたは両方が発生します。serverAdminはエラーを見逃すか無視し、ログディレクトリはすべてのサーバー領域をある時点で消費します。
ランス

4
下の答えからフェイクコードモンキー・ラシッドのコメントからE_ALL&〜E_STRICTを使用していた-これが私のために動作しません
besimple

1
これは、php.iniで見つかった次の行と一緒にどのように機能しますかlog_errors = On Vs ini_set( 'display_errors'、 '0'); 最後の1セットが勝ちますか?
着陸

@nateコードを投稿するときに、どこに貼り付けることができるかを教えてください。:私はそれをどこに置くか知りませんphp.iniか、.htaccess私のPHPコード内のどこか。
ДаниилПронин

89

エラーなし。

error_reporting(0);

または厳密ではない

error_reporting(E_ALL ^ E_STRICT);

すべてのエラーを再び表示したい場合は、

error_reporting(-1);


56
+1:これは、^1つのタイプのエラーを省略する場合にのみ有効だと思います。追加のタイプをオフにする場合は、E_ALL & ~E_DEPRECATED & ~E_STRICTフォーマットを使用する必要があります。またはおそらく(E_ALL & ~(E_DEPRECATED | E_STRICT))フォーマット。
フェイクコードモンキーラシード、2011

10
注:E_STRICTはphp 5.4以降、E_ALLの一部にすぎません
Fred Haslam

@FakeCodeMonkeyRashidなんでそれなんだろう?おそらく、評価の順番が重要だからでしょうか?
2013

PHP <5.4 ini_set('error_reporting', E_ALL&~E_STRICT); でのSTRICTエラーの報告を抑制する>> 5.4 でのSTRICTエラーの報告を抑制するini_set('error_reporting', E_ALL^E_STRICT);
Mel_T

^(「ではなく」)ではなく(「xor」)を使用すること& ~悪い考えであることを指摘したいと思います。たとえば、E_STRICTはE_ALLの一部であり、常に E_ALLの一部で^あるという仮定に依存します。E_ALLは過去に変更されたため、これは悪いことです(E_STRICTは過去のものではありませんでしたが、現在はPHP 5.4以降です)。仮定が1日失敗すると、破られるだけでなく、実際に想定されていることとはのことが行われます。XOR()の機能により E_STRICT が有効になります。ただし、E_ALLの現在の値に関係なく、常に E_STRICT 無効になります。したがって、使用する必要があります。^^& ~& ~
ジェイ

31

上記のソリューションはすべて正しいです。ただし、通常のPHPアプリケーションについて説明する場合、必要なすべてのページにそれらを含める必要があります。これを解決する方法は.htaccess、ルートフォルダを使用することです。エラーを非表示にするだけです。[次の行の1つをファイルに入れます]

php_flag display_errors off

または

php_value display_errors 0

次に、エラー報告を設定するには

php_value error_reporting 30719

あなたは値がどのように思っている場合には30719来て、E_ALL(32767)、E_STRICT(2048)は、(実際の数値とを保持する定数です32767 - 2048 = 30719


2
どうもありがとう-これはPHP 5.4.7のトリック(.htaccessソリューション)を実行しました-.iniを変更することさえも-トリックを実行していました。

php_admin_value error_reportingこれを機能させるために使用しました(vhost構成で)。
Lou Terrailloune、2013

@Seza、正しい修正済み。
Starx 2013

1
ほとんどのE_STRICTエラーはコンパイル時であり、ランタイムでオーバーライドすることはできませんので、そのページについては、この方法が好まれていない
AbiusX

2
こんにちは、少し簡単にするために、wampを使用している人は、php> php設定>>表示エラーをクリックしてエラーを無効にできます。オンになっている場合はオフにします。
Hemang Rami 2014

9

php.iniで設定されていない場合、error_reportingフラグのデフォルト値はE_ALL&〜E_NOTICEです。ただし、一部のインストール(特に開発環境を対象とするインストール)では、E_ALL | E_STRICTこのフラグの値として設定されます(これは開発中推奨値です)。場合によっては、特に、PHP 5.3時代以前に開発され、PHP 5.3で定義されたベストプラクティスでまだ更新されていないオープンソースプロジェクトを開発環境で実行したい場合、おそらくいくつかのあなたが得ているようなメッセージ。この状況に対処する最善の方法は、E_ALLのみをerror_reportingフラグの値として設定することです。php.iniまたはコード内(おそらく次のように、web-root内のindex.phpのようなフロントコントローラー内):

if(defined('E_STRICT')){
    error_reporting(E_ALL);
}

8

php.iniセット:

error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT

4

ワードプレス

ワードプレス環境で作業している場合、ワードプレスはwp-includes / load.phpファイルのfunctionにエラーレベルを設定しますwp_debug_mode()。したがって、この関数が呼び出された後でレベルを変更する必要があります(gitにチェックインされていないファイルであるため、開発のみです)、またはerror_reporting()呼び出しを直接変更する必要があります


これは本当に便利です。Wordpressの1つのインストールでデバッグモードをオンにしましたが、これが実行されていることに気付きませんでした。情報のおかげで!
Tim

2

クリーンでプロダクション対応のソフトウェアに適した答えが見つからなかったので、次のようにします。

/*
 * Get current error_reporting value,
 * so that we don't lose preferences set in php.ini and .htaccess
 * and accidently reenable message types disabled in those.
 *
 * If you want to disable e.g. E_STRICT on a global level,
 * use php.ini (or .htaccess for folder-level)
 */
$old_error_reporting = error_reporting();

/*
 * Disable E_STRICT on top of current error_reporting.
 *
 * Note: do NOT use ^ for disabling error message types,
 * as ^ will re-ENABLE the message type if it happens to be disabled already!
 */
error_reporting($old_error_reporting & ~E_STRICT);


// code that should not emit E_STRICT messages goes here


/*
 * Optional, depending on if/what code comes after.
 * Restore old settings.
 */
error_reporting($old_error_reporting);
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.