web-dev-qa-db-ja.com

php / mysqlで警告とエラーをオフにする

私は予想される通知と警告を受け取っています。私のphpファイルでそれらをオフにしたいと思います。エラーは次のとおりです。

Warning: fsockopen()

通知は次のとおりです。

Notice: A non well formed numeric value encountered in

このphpスクリプトにcronを使用することを計画していますが、エラーや通知をどこにも記録したくありません。

51
Ossi

スクリプトが完全に機能していることを確認したら、警告と次のような通知を取り除くことができます。次の行をphpスクリプトの先頭に追加します。

error_reporting(E_ERROR);

その前に、スクリプトで作業する場合、すべての通知または警告が1つずつ消えるように、スクリプトを適切にデバッグすることをお勧めします。したがって、最初にできるだけ詳細に設定する必要があります。

error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);

更新:エラーを表示する代わりにログに記録する方法コメントで示唆されているように、より良い解決策は、エラーをファイルに記録して、ユーザーではなく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>
139
pixeline

すべてのエラー報告をオフにするのではなく、特定のエラーを抑制するために「@」記号を関数の先頭に追加します。

詳細: http://php.net/manual/en/language.operators.errorcontrol.php

PHPは、1つのエラー制御演算子、アットマーク(@)をサポートしています。 PHPの式の前に追加すると、その式によって生成される可能性のあるエラーメッセージは無視されます。

@fsockopen();

18
Mike B

テストサーバーで常にエラーを表示します。本番サーバーでエラーを表示しないでください。

ページがローカルサーバー、テストサーバー、またはライブサーバーにあるかどうかを判断するスクリプトを記述し、$ stateを「local」、「testing」、または「live」に設定します。次に:

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

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);
13

何らかの理由でphp.iniファイルにアクセスできない場合は、次の行を追加して、任意のディレクトリの.htaccessファイルでstdout(display_errors)のエラーを無効にします。

php_flag display_errors off

さらに、エラーロギングをファイルに追加できます。

php_flag log_errors on

2
Flak DiNenno

php.iniで必要なエラーレポートのタイプを設定するか、スクリプトの上部でerror_reporting()関数を使用して設定できます。

2
Sabeen Malik