2009-10-29 7 views
49

予告と警告が表示され、PHPファイルでそれらを無効にしたいと思います。エラーは以下のとおりです。php/mysqlの警告とエラーをオフにする

Warning: fsockopen() 

と注意事項は以下のとおりです。

Notice: A non well formed numeric value encountered in 

私はこのPHPスクリプトのためにcronを使用する予定ですし、どこでも記録されたエラーや通知を取得する必要はありません。

+4

をcronによってエラーが電子メールで送信されないようにするには、出力を '/ dev/null'に指定します。それでも、エラーは一般的には理由があります。おそらく、あなたのcronスクリプトがいつ壊れるかを知りたいと思うでしょう!エラーを正常に処理してみてください。 – ceejayoz

+0

関連する箇所:http://stackoverflow.com/questions/4330494/preventing-warnings-from-fsockopen – trante

答えて

137

あなたのスクリプトが完全に働いていることを確認しているとき、あなたは警告してこのような通知を取り除くことができます:あなたの上で作業する場合、その前に

error_reporting(E_ERROR); 

:あなたのPHPスクリプトの先頭に次の行を入れて私はあなたのスクリプトを正しくデバッグして、すべての通知または警告が1つずつ消えるようにアドバイスします。 だからあなたが最初とそれをできるだけ詳細に設定する必要があります

error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE); 

UPDATE:代わりにコメントで示唆したように、それらを 表示のエラーを記録する方法を、よりよい解決策は、これだけのファイルにエラーを記録することですPHP開発者は、ユーザーではなくエラーメッセージを表示します。 可能な実装は.htaccessファイル経由で、php.iniファイル(source)にアクセスできない場合に便利です。

# supress php errors 
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 
# enable PHP error logging 
php_flag log_errors on 
php_value error_log /home/path/public_html/domain/PHP_errors.log 
# prevent access to PHP error log 
<Files PHP_errors.log> 
Order allow,deny 
Deny from all 
Satisfy All 
</Files> 
+6

これを行わないでください。すべてのエラーを抑止することは恐ろしい考えです。 – ceejayoz

+31

あなたはマントラを朗読しているかのように話しています。この特定のユースケースでは、それはまさにユーザーが望んでいるものです。彼が伐採システムを頼んだら、彼はそれを求めていただろう。 – pixeline

+4

私はceejayozとpixelineの両方に同意します。ただし、error_reporting(0)は運用環境のセキュリティ手段としてのみ設定する必要があります。そのため、重大な情報が誤って悪意のあるユーザーに漏洩することはありません。 error_reporting(0)を使用して「エラーを無視する」とすると、悪いものにつながるリスクが高くなります。私はそれが著者が求めていることを知っていますが、私はそれに反対します。 –

2

あなたがphp.iniでたり、スクリプトの先頭にはerror_reporting()関数を使用して必要な報告、エラーの種類を設定することができます。

18

すべてのエラー報告をオフにするのではなく、特定のエラーを抑制する機能の前に '@'記号を付けます。

詳細:の記号(@):http://php.net/manual/en/language.operators.errorcontrol.php

PHPはエラー制御演算子をサポートしています。 PHPの式の前に付けると、その式によって生成されるエラーメッセージは無視されます。

@fsockopen();

+0

これは、通常、生産現場でのコードにとって、より良い解決策です.IMHO – billrichards

+1

多分、ある関数では "* maybe *"でしょうが、後で* something *がうまくいかず、エラーログ空です。最も良い方法は、ケース/スイッチを設定して、エラーの「表示」を本当に素早くオン/オフできるようにすることです。その後、ライブで彼らはオフになって、dev/testがオンになることができます。どちらの方法でも、エラーログファイルへのロギングは常に(ほぼ)アドバイスされます – James

14

、必ずテストサーバー上のエラーを示しています。運用サーバーでエラーを表示しないでください。

ページがローカルサーバー、テストサーバー、またはライブサーバーにあるかどうかを判断し、$ stateを "local"、 "testing"、または "live"に設定するスクリプトを作成します。その後:中

if($state == "local" || $state == "testing") 
{ 
ini_set("display_errors", "1"); 
error_reporting(E_ALL & ~E_NOTICE); 
} 
else 
{ 
error_reporting(0); 
} 
2

あなたには、いくつかの理由でphp.iniファイルを取得できない場合は、stdoutにエラーを無効にする(display_errors)。次の行を追加することにより、任意のディレクトリ内のhtaccessファイル:さらに

php_flag display_errors off

は、ファイルにエラーログを追加することができます。

php_flag log_errors on

13

PHP用のerror_reporting参照:

// 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 
// This is the default value set in php.ini 
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); 
+0

エラーレポートはオフになりますが、そのレポートはフォルダ内のログファイルに保存されます。どのようにログファイルを作るためにPHPを停止するには? tyx –

+0

@MehdiJ:** error_log **のエラーを記録するPHPを停止する**このコードを追加する 'ini_set( 'log_errors'、 'off');' –

関連する問題