PHPの通知をオフにするにはどうすればよいですか?


126
Notice: Constant DIR_FS_CATALOG already defined

ですでにコメントアウトしていますdisplay_errorsphp.ini、機能していません。

そのようなものをブラウザに出力しないようにPHPを作成するにはどうすればよいですか?

更新

私はdisplay_errors = Offそこに置いたが、それはまだそのような通知を報告している、

これはPHP 5.3の問題ですか?

多数のコールスタックも報告しています。


3
Apacheを使用している場合は、サーバーを再起動する必要があります。XAMPPを使用している場合は、マネージャーアプリで[再起動]を選択してください。
st4wik 2015

2
実行grep display_errors /path/to/php.iniして、ファイルのどこかで行がオーバーライドされているかどうかを確認することをお勧めします。これは私に起こっていたものです。
usandfriends 2015

Error_reportingが解決策です
David Stienen

ini_set('display_errors',0)あなたのphpファイルで試してください。ini-settingsが機能していない場合phpinfo()は、目的の値が表示されるかどうかを確認する必要があります。そうでない場合は、間違ったiniファイルを変更したか、何かがphp.iniの値を上書きします
Radon8472

PHP 5.3のバグではありません。display_errorsはphp 4.0.3から最新バージョンまで動作します@see 3v4l.org/87gIl
Radon8472

回答:


78

あなたは、設定することができますdisplay_errors0または使用error_reporting()の機能を。

ただし、通知は面倒です(私は部分的に共感できます)が、それらは目的を果たします。定数を2回定義するべきではありません。2回目は機能せず、定数は変更されません。


4
+1:私は、彼が報告をオフにするのではなく、エラーを修正するべきだと言及することを認めます。そして、あなたは@Jonathan Kuhnより穏やかな方法でそれをしました:-)
Josh

1
いいえ、これはphp5.3のバグと思わdisplay_errorsれ、期待どおりに動作しません。
user198729

@user phpinfo()は、設定が実際に適用されるかどうかを確認します。私を許してください、しかし私はあなたがPHP 5.3のバグを発見したことを強く疑います-私がそれを見るときだけ私はそれを信じます:)
Pekka

奇妙な、local valueではありますが、master value何を知らない、オフであることを意味し、正確に...
user198729

1
@userローカル値はini_setディレクティブまたは ファイルのphp_ini_flag設定から取得できると思い.htaccessます。
ペッカ

242

PHPのドキュメント(からのerror_reporting):

<?php
// Turn off all error reporting
error_reporting(0);
?>

その関数の他の興味深いオプション:

<?php

// Report simple running errors
error_reporting(E_ERROR | E_WARNING | E_PARSE);

// Reporting E_NOTICE can be good too (to report uninitialized
// variables or catch variable name misspellings ...)
error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);

// Report all errors except E_NOTICE
// This is the default value set in php.ini
error_reporting(E_ALL & ~E_NOTICE);
// For PHP < 5.3 use: E_ALL ^ E_NOTICE

// Report all PHP errors (see changelog)
error_reporting(E_ALL);

// Report all PHP errors
error_reporting(-1);

// Same as error_reporting(E_ALL);
ini_set('error_reporting', E_ALL);

?>

非常に役に立ち、質問への答えを提供します。私はすべての通知を同様に修正する方が良いことを知っていますが。通知以外のすべてを表示すると便利な場合があります。
Timo002 14年

3
上記の投稿で述べたように、通知のみをオフにしても^ NOTICEを使用しても機能しませんでした。PHP v5.3の場合:E_ALL&〜E_NOTICE
Chizzle

JSONまたはXMLなどを返すREST APIがある場合は、これらをオフにすることをお勧めします。または、少なくともそれらを例外に変換し、それに応じて処理します。
TheRealChx101 2018年

こんにちは。私のために働いた。どうもありがとうございました。
H.ファリド

エラーがstdoutputに送信されるかどうかは、Display_errorsが制御します。ただし、error_reportingを0に変更すると、すべてのエラー処理とエラーログ記録機能が完全に無効になります。error_reporting(0)は絶対に行わないでください。
Radon8472

30

コマンドラインphpの場合、

error_reporting = E_ALL & ~E_NOTICE

/etc/php5/cli/php.ini

phpその後、コマンドの実行は通知を省略します。


これを行うと、php.iniでerror_reporting = E_ALL&〜E_NOTICE&〜E_WARNINGになります。PHP通知とPHP警告を無効にします。phpの通知とphpの警告がブラウザに表示されないように
Deepak Lamichhane

これは、コンソールのphp設定に当てはまります。apache2を介してWebページを生成するためにphpを使用している場合webserver設定ファイルは/etc/php5/apache2/php.iniですphpinfo()を使用して、実際に使用されている設定ファイルを確認するのが最善です。
MilanG 2016

23
<?php

// Turn off all error reporting
error_reporting(0);

// Report simple running errors
error_reporting(E_ERROR | E_WARNING | E_PARSE);

// Reporting E_NOTICE can be good too (to report uninitialized
// variables or catch variable name misspellings ...)
error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);

// Report all errors except E_NOTICE
error_reporting(E_ALL & ~E_NOTICE);

// Report all PHP errors (see changelog)
error_reporting(E_ALL);

// Report all PHP errors
error_reporting(-1);

// Same as error_reporting(E_ALL);
ini_set('error_reporting', E_ALL);

?>

ソースhttp://php.net/manual/en/function.error-reporting.php


2
これは何年も前に投稿されたこの既存の回答の単なる複製ではありませんか?
2015

私たちは両方ともphpのドキュメントからコピーして貼り付けており、どちらの回答もリソースについて言及しています。
Abhishek Goel

@AbhishekGoelユニコーンは変装したポニーであり、その発言は無関係であり、4年後も既存の回答を複製してます。
リッキー・ボイス2017年

@RickyB既存の回答を確認せず、コピーもしませんでした。
Abhishek Goel 2017年


6

あなたは探している:

php -d error_reporting="E_ERROR | E_WARNING | E_PARSE"

2
@Christian様、StackOverflowへようこそ。将来的には、解答にもう少し説明/詳細を追加して、理由/解決策が機能する/問題を修正する方法についてそれを見る人に啓蒙できると便利です。
どうも

1
丁度!私/usr/bin/php -d error_reporting="E_ERROR | E_WARNING | E_PARSE" -f /path/to/file.phpは自分のcrontab に使用します
vladkras

4

error_reportingはコードの内部を設定しないことを好みます。しかし、1つのケース、レガシー製品では、非常に多くの通知があり、それらを非表示にする必要があります。

したがって、次のスニペットを使用してサーバー側の設定値を設定しますerror_reportingが、E_NOTICEsを減算します。

error_reporting(error_reporting() & ~E_NOTICE);

エラー報告の設定は、php.iniまたはでさらに構成できます.htaccess。通知のみが常に無効になります。


3

ini_set('display_errors',0);スクリプトで設定するか、で表示するエラーを定義できますerror_reporting()


ini_setここで説明したerror_reporting(0)方法を使用する必要があり、他の場所で説明した方法では効果がありませんでした。
pix

3

エラーを引き起こさないことによって:

defined('DIR_FS_CATALOG') || define('DIR_FS_CATALOG', 'whatever');

本当に必要な場合は、error_reporting()を使用してエラー報告をE_ALL ^ E_NOTICEに変更してください。


1
本番サイトである場合、エラーがないと思われるかどうかに関係なく、エラーが発生しても表示しないでください。「エラーを引き起こさないこと」は、有効な質問に対する少し生意気な回答のようです。
カム

5
本番サイトでエラーを許可してもよいのはいつからですか?私は本番サイトではエラーを表示すべきではないことに同意します。それは私が言っていたことではありません。定数が定義されているかどうかを確認し、定義されていない場合は設定する必要があると言っていました(そのため、コードサンプルを提供しました)。
ジョナサンクーン

あなたの答えは「最も良い」ではありませんでしたが、それはOPの質問に最大限に答えるようです。あなたの答えに+1し、/それが答えとしてマークされていればいいのに。
ナスカ

@ナスカうん、私はそれ以来私の態度を変え、はるかに友好的になるようにしています。:)
ジョナサン・クーン

2

PHPコードの場合:

<?php
error_reporting(E_ALL & ~E_NOTICE);

構成の場合php.ini

error_reporting = E_ALL & ~E_NOTICE

1

私はこのトリックを最近見つけました。警告/エラーを生成する可能性のある行の先頭に@を打ちます。

まるで魔法のように、彼らは消えます。


21
それは通常悪い考えです、それはあなたの車が恐ろしい研削音を立てているので耳栓を入れるようなものです。
David Morrow、

10
これは実際には、たとえば変数が設定されているか空であるかに関係なく変数をレンダリングする場合など、一部のインスタンスでは完全に理にかなっています。
フランス

1
これは、作成者がまだ更新していないWordPressプラグインのようなものがあり、問題の原因が正確にわかっている場合にのみ意味があります。それは修正ではなく、バンドエイドです。
2013

error_reporting()と '@'の両方が好きです。どちらも知らなかった。ありがとうございました。'@'が好きです。これはerror_reporting(0)と同じ機能を提供し、入力が簡単だからです。問題が「恐ろしい研削音」ではなく「排気を妨げるコートハンガー」のようなものであれば、プロジェクトを進めることができます。時間があれば簡単に見つけて修正できます。これは、エラーがファイルから読み取られたデータが原因で発生するため、タイプミスやライブラリの問題は発生しませんでした。
Mark Longmire 2013年

1
あなたが何をしているのか100%確実なところに@を入れてください。
ニック

1

phpinfo()を使用して検索しConfiguration File (php.ini) Path、phpのどの構成ファイルパスが使用されているかを確認します。PHPは、実行している環境に応じて複数の設定ファイルを持つことができます。通常、コンソールの場合:

/etc/php5/cli/php.ini

そして、Apacheによって実行されるphpの場合は次のとおりです:

/etc/php5/apache2/php.ini

次にerror_reporting、必要な方法を設定します。

http://www.phpknowhow.com/configuration/php-ini-error-settings/ http://www.zootemplate.com/news-updates/how-to-disable-notice-and-warning-in-phpini-ファイル


1

一部の人が述べたように、そしてあなたがコード作成者である場合、それらを修正しないよりも長期的にはより多くの問題を引き起こすため(特にOSをアップグレードする場合)、それらすべてのエラーや通知などを修正する必要があります。サーバーの場合、クライアントの画面ではなく、ログにのみエラーが表示されるはずです。

したがって、ブラウザでのエラーを回避するには、display_errorsすでに見つけたフラグを使用します。

display_errors = Off

今、本当の問題は、誰か他の人のコードを実行しているときです。その場合、コードをアップグレードするたびにコードを変更すると上書きされる可能性があります。そのコードを保守するのは面倒です。

私の場合、スクリプトを時々実行するcrontabためにPHPを実行していwp-cron.phpます。メールにエラーが送信されていましたが、10分ごとに1通のメールを受け取ると面倒になります。ただし、その場合、Wordpressシステムには構成ファイルが含まれてWP_DEBUGおり、それらはerror_reporting()関数を呼び出すためerror_reporting、コマンドラインで変数を変更しようとしても機能しません。代わりに、wp-config.phpに、ルートフォルダー内のファイルして、WP_DEBUGがに設定されていることを確認する必要がありfalseます。そうしないと、これらすべての警告と通知が常に表示されます。


0

定数が既に定義されているかどうかを確認するには、以下を使用します。

<?php
if (!defined('MYCONST'))
    define('MYCONST', 'Weeha!');
?>

0

デフォルトはOnであるため、php.iniのdisplay_errorsをコメント化しても機能しないと思います。代わりに「オフ」に設定する必要があります。

設定の変更を適用するには、Apacheを再起動することを忘れないでください。

また、実行時にdisplay_errorsを設定できますが、ここで変更しても致命的なエラーには影響しません。

他の人が指摘したように、理想的には、開発中はできる限り高いレベルでerror_reportingを実行し、display_errorsを有効にする必要があります。初めて使用するときは煩わしいことですが、これらのエラー、警告、通知、厳密なコーディングのアドバイスがすべて合わさって、より優れたコーダーになることができます。


0

二重定義定数

ここで特定のエラーを修正するには、定数を定義する前に、定数がすでに定義されているかどうかを確認できます。

if ( ! defined( 'DIR_FS_CATALOG' ) ) 
  define( 'DIR_FS_CATALOG', 'something...' );

個人的には、コードベースで定数を検索することから始めDIR_FS_CATALOG、次に、二重定義をこれで置き換えます。

PHPの通知をケースバイケースで非表示にする

PHPには、@通知や警告を引き起こす特定の関数を無視するために使用できるエラー制御演算子が用意されています。

これを使用すると、コードでケースバイケースで通知と警告を無視/無効化できます。これは、エラーまたは通知が意図的、計画的、または非常に煩わしく、ソースで解決できない場合に役立ちます。 。@通知を引き起こしている関数または変数の前にを配置すると、無視されます。

次に例を示します。

// Intentional file error
$missing_file = @file( 'non_existent_file' );

詳細については、PHPのエラー制御演算子のドキュメントをご覧ください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.