PHPの警告メッセージを削除する


回答:


349

警告の原因を修正する必要がありますが、を使用してエラーの表示を制御できますerror_reporting()。警告メッセージをスキップするには、次のようなものを使用できます。

error_reporting(E_ERROR | E_PARSE);

53
E_ALL ^ E_WARNING、警告以外のすべてのエラー報告を有効にすることは、への議論のより良い選択のようerror_reportingです。
マークアメリー2014

1
私の場合、警告メッセージの生成は、単体テストの一部であるため、意図的な動作であることに同意します。
pgee70

120

関数呼び出しの前に@を付けると、すべてのエラーメッセージを抑制できます。

@yourFunctionHere();

4
これはエラーを非表示にするだけで、まだ発生しています。エラーがあるとPHPの速度が低下するため、可能な場合はエラーを修正するのが最善です。@を使用すると、エラーがない場合でもコードが遅くなります。vega.rd.no/articles/php-performance-error-suppression
dprevite

46
時々(残念ながら)あなたには本当に選択の余地がない。たとえば、PHP関数parse_url()は「深刻な形式の」URLに対して警告を生成します。この場合、この関数はfalseを返すため、これは間違いなくバグです。したがって、プログラムの出力でこれらのPHP警告を許容するか(パーサー/バリデーターアプリケーションでは受け入れられない場合があります)、警告を抑制するか、URLの独自のパーサー/バリデーターを作成して、壊れたPHPの動作を回避する必要があります。この場合、@を選択します。
Peter

1
重要:このメソッドは、(1)警告を生成する問題を修正できない、または(2)php error_reportingを介してエンドユーザーから警告を隠すことができない場合に使用してください...開発者から警告を非表示にすることは解決策ではありません。
Joshua Kissoon 2014年

3
これが重要な理由を説明しましょう。などの一部の関数dns_get_recordは警告をスローします。あなたのコードは警告を補うかもしれませんが、それでもそれらを投げます。エラー報告をオフにすると、運用サーバーでは機能しますが、開発サーバーでは機能しません。XMLコンテンツを生成している場合、警告が原因でサーバーが不正な形式のXMLを送信しているため、警告が表示され、ブラウザーがレンダリングされません。時々、それをdevelにしたいのですが、すでに補正した一時的なDNSルックアップの失敗によって引き起こされた何かのためではありません。
アリスワンダー

2
すべての警告メッセージではなく、警告をエラーとして処理し、独自のエラーメッセージを生成したいのは、なぜこれが役立つのかを説明しましょう
Daniel N.

43

他のすべてのエラー報告を有効にしたまま警告を抑制するには:

error_reporting(E_ALL ^ E_WARNING); 


18

他のすべてのエラーを表示しながら、警告やその他のエラータイプ(通知など)を抑制したい場合は、次のようにします。

error_reporting(E_ALL & ~E_WARNING & ~E_NOTICE);

15

Core Phpで、警告メッセージセットerror_reporting(0)を非表示にして、共通のインクルードファイルまたは個別のファイルの上に配置します。

Wordpressで警告と通知非表示にするには、wp-config.phpファイルに次のコードを追加します

ini_set('log_errors','On');
ini_set('display_errors','Off');
ini_set('error_reporting', E_ALL );
define('WP_DEBUG', false);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);

Wordpressでログを非表示にする場合、これが最良のソリューションです。ありがとうございました!!
Neo Morina

10

質問に正確に答えているわけではありませんが、状況によってはこれがより良い妥協案だと思います。

サードパーティライブラリのprintf()ステートメントの結果として警告メッセージが表示されました。原因は正確にわかっていました-サードパーティがコードを修正している間の一時的な回避策。警告を抑制すべきではないことに同意しますが、警告メッセージが画面にポップアップ表示されてクライアントに自分の作業を示すことができませんでした。私の解決策:

printf('<div style="display:none">');
    ...Third-party stuff here...
printf('</div>');

警告は私へのリマインダーとしてまだページのソースにありましたが、クライアントには見えません。


5
個人的に、私が使用したいob_start()ob_end_clean()の代わりに。この方法では、データはブラウザに送信されません(ここで送信されます)。
h2ooooooo

6
そのため、「いくつかの状況」、「警告を抑制してはならない」、「私への通知」を含めました。
DaveWalley

1
さらに投票する前に、私の返信を読んでください。「サードパーティ」、「妥協」および上記のコメントに注意してください。他の誰かが私と同じ状況にある場合に備えて、この回答を追加しました。その特定の状況では、他のすべての回答はそれほど良くなかったでしょうが、これは私を救いました。次回は役立つことについて2度考えます。
DaveWalley 2014

この素晴らしいアイデアを削除しないでいただきありがとうございます。私のシステムでは、クライアントから送り返されたすべてのエラーと警告を保存し、管理者がログインすると、それらのアクティビティがすぐに警告され、保守担当者にアドバイスすることができます。このサイトは教育用ゲームのため、1時間ほど問題が発生しても大きな問題にはなりません。
cneeds

8

私のphp.iniで次のようにしています:

error_reporting = E_ALL & ~E_WARNING  & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED

これは致命的なエラーのみを記録し、警告は記録しません。


7

より良い解決策は.htaccessの設定だと思います。そうすれば、アプリケーションのコードを変更する必要はありません。Apache2のディレクティブは次のとおりです

php_flag display_startup_errors off
php_flag display_errors off
php_flag html_errors off
php_value docref_root 0
php_value docref_ext 0

7

error_reportingを使用して警告を抑制できますが、はるかに良い方法は、最初にスクリプトを修正することです。

方法がわからない場合は、質問を編集して、問題の行と表示された警告を表示してください。


7
サファリ、あなたは問題を修正するべきであり、それを無視するべきではない。
サンプソン

2
Safaaliは、PHPにある程度の興味を持っているので、自分自身に賛成して、そのスクリプトの修正を検討します。
ペッカ

0

Error Control Operatorによる回答はすでにありますが、説明が不足しています。@演算子はすべての式で使用でき、エラーを非表示にします(致命的なエラーを除く)。

@$test['test']; //PHP Notice:  Undefined variable: test

@(14/0); // PHP Warning:  Division by zero

//This is not working. You can't hide Fatal Errors this way.
@customFuntion(); // PHP Fatal error:  Uncaught Error: Call to undefined function customFuntion()

デバッグには、高速で完璧な方法です。ただし、本番環境で使用したり、ローカルバージョンに永続的に含めたりすることは絶対にしないでください。それはあなたに多くの不必要な刺激を与えます。

代わりに検討する必要があります:

1.承認された回答に記載されているエラー報告設定。

error_reporting(E_ERROR | E_PARSE);

またはPHP INI設定から

ini_set('display_errors','Off');

2.例外をキャッチする

try {
    $var->method();
} catch (Error $e) {
    // Handle error
    echo $e->getMessage();
}

0

すべての警告を無視するには、コードの上部にある次のサンプルを使用します。

error_reporting(0);

そして、あなたの答えと受け入れられた答えの違いは何ですか?
endo64
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.