ホームページ > バックエンド開発 > PHPチュートリアル > PHPエラーシールドエラー_レポート詳細説明_PHPチュートリアル

PHPエラーシールドエラー_レポート詳細説明_PHPチュートリアル

WBOY
リリース: 2016-07-13 10:55:03
オリジナル
936 人が閲覧しました

Windows 環境の場合: プログラムは元々 PHP チュートリアル 4.3.0 で正常に実行されていましたが、4.3.1 で多くのエラーが報告されるのはなぜですか? 一般的なプロンプトは次のとおりです: 注意: 未定義の変数: 変数名。 たとえば、次のコード:
コードをコピーします コードは次のとおりです:
if (!$tmp_i) {
$tmp_i=10; }

4.3.0 では正常に実行されますが、4.3.1 で実行すると Notice:Unknown varialbe:tmp_i というメッセージが表示されます

次の質問:

1. 何が問題ですか?
2. このコードはどのように変更する必要がありますか?
3. コードを変更せずに、4.3.0 の元のプログラムを 4.3.1 環境で正常に実行できるように php.ini の設定を変更するにはどうすればよいですか?

解決策:

プログラムの冒頭に文を追加します:

error_reporting(E_ALL & ~E_NOTICE); または error_reporting(E_ALL ^ E_NOTICE);


または

php.ini を変更する

error_reporting = E_ALL & ~E_NOTICE

error_reporting() 関数について:

error_reporting() は、PHP のエラー報告レベルを設定し、現在のレベルを返します。


; エラー報告はビット単位です。または、数値を合計して、必要なエラー報告レベルを取得します。

; E_ALL - すべてのエラーと警告

; E_ERROR - 致命的な実行時エラー
; E_WARNING - 実行時警告 (致命的ではないエラー)
; E_PARSE - コンパイル時の解析エラー
; E_NOTICE - 実行時のリマインダー (コードのバグが原因で発生することがよくあります。
)
;意図的な行動によって引き起こされることもあります。 (例: 初期化されていない変数に基づいて自動的に初期化されます

;初期化されていない変数の代わりに空の文字列が使用されるという事実)


; E_CORE_ERROR - PHP 起動時の初期化プロセス中に発生する致命的なエラー

; E_CORE_WARNING - PHP 起動の初期化プロセス中に発生する警告 (致命的ではないエラー)

; E_COMPILE_ERROR - 致命的なコンパイル時エラー
; E_COMPILE_WARNING - コンパイル時の警告 (致命的ではないエラー)
; E_USER_ERROR - ユーザーが生成したエラー メッセージ
; E_USER_WARNING - ユーザーが生成した警告メッセージ
; E_USER_NOTICE - ユーザーが生成したリマインダーメッセージ

使用方法:

error_reporting(0);//エラー報告を無効にする

error_reporting(E_ALL ^ E_NOTICE);//E_NOTICE を除くすべてのエラー メッセージを表示します

error_reporting(E_ALL^E_WARNING^E_NOTICE);//E_WARNING E_NOTICE を除くすべてのエラー メッセージを表示します
error_reporting(E_ERROR | E_WARNING | E_PARSE);//実行時エラーを表示します。これは error_reporting(E_ALL ^ E_NOTICE); と同じ効果があります。 error_reporting(E_ALL);//すべてのエラーを表示

PHP エラーが発生しました

重大度: 注意

メッセージ: 未定義の変数: ユーザー

通常、デフォルトの通常の PHP ファイルで未定義の宣言された変数を出力する場合、エラーは報告されませんが、codeigniter フレームワークではエラーが報告されます。これは、ページの追加と変更を統合したい「怠け者」にとっては非常に不快です。便利です。私は初心者なので、コード内でこのエラー メッセージをブロックしたいと思っています。@ も使用しましたが、@ を使用するとパフォーマンスが大幅に低下すると多くの人が言っています...

最後に、codeigniter は意図的にこのエラー メッセージを表示しているのではないかと思いました。この種のエラーをブロックするにはどうすればよいでしょうか? .php の error_reporting(E_ALL); を

に変更するだけです。 error_reporting(E_ALL ^ E_NOTICE); このエラーは、他のエラーに影響を与えることなくブロックできます。


見つかった情報の一部を以下に示します:

error_reporting() は、PHP のエラー報告レベルを設定し、現在のレベルを返します。

文法

エラーレポート(レポートレベル)

パラメータレベルが指定されていない場合は、現在のエラーレベルが返されます。レベルに使用できる値は次のとおりです:


1 E_エラー
2 E_警告

4 E_PARSE

8 E_通知
16 E_CORE_ERROR
32 E_CORE_WARNING
64 E_COMPILE_ERROR
128 E_COMPILE_WARNING
256 E_USER_エラー
512 E_USER_警告
1024 E_USER_NOTICE
2047 E_ALL
2048 E_STRICT
E_NOTICE は、通常の状況が記録されないことを意味し、存在しない変数にアクセスしようとしたり、存在しないファイルを表示するために stat() 関数を呼び出したりするなど、プログラムにエラーが発生した場合にのみ使用されます。

E_WARNING は通常表示されますが、プログラムの実行は中断されません。これはデバッグに役立ちます。たとえば、問題のある正規表記を使用して ereg() を呼び出します。

通常は E_ERROR が表示され、プログラムの実行が中断されます。これは、このマスクを使用してメモリ構成やその他のエラーを追跡できないことを意味します。

E_PARSE 構文からのエラーを解析します。

E_CORE_ERROR E_ERROR と似ていますが、PHP コアによって引き起こされるエラーは除外されます。

E_CORE_WARNING E_WARNING と似ていますが、PHP コア エラー警告は含まれません。

PHPエラーレポート
php.ini ファイルには多くの構成設定があります。 Linux への PHP および Apache 2 のインストールに関するドキュメントに示されているように、php.ini ファイルがすでにセットアップされ、適切なディレクトリに配置されている必要があります。 PHP アプリケーションをデバッグするときに注意すべき構成変数が 2 つあります。 2 つの変数とそのデフォルト値は次のとおりです:
display_errors = オフ
error_reporting = E_ALL
これら 2 つの変数の現在のデフォルト値は、php.ini ファイル内で検索すると見つかります。 display_errors 変数の目的は明らかです。この変数は、エラーを表示するかどうかを PHP に指示します。デフォルト値はオフです。ただし、開発プロセスを容易にするために、この値をオンに設定します。
display_errors = オン
error_reporting 変数のデフォルト値は E_ALL です。この設定では、不適切なコーディング方法から無害なヒント、エラーに至るまで、あらゆるものが表示されます。 E_ALL は、ブラウザの出力を混乱させる小さな事柄 (初期化されていない変数など) についてのヒントも画面上に表示するため、開発目的には少し粒度が高すぎます。私が知りたいのはエラーと不適切なコーディング方法だけであり、無害なヒントは知りたいわけではありません。したがって、error_reporting のデフォルト値を次の値に置き換えてください:
error_reporting = E_ALL & ~E_NOTICE

Apacheを再起動すると、すべてが設定されます。次に、Apache で同じことを行う方法を学びます。

サーバー上のエラー報告
Apache の動作によっては、コンピュータ上に複数のバージョンの PHP が存在する可能性があるため、PHP でエラー報告を有効にしても機能しない場合があります。 Apache は 1 つの php.ini ファイルしか参照できないため、Apache が使用している PHP バージョンを判断することが難しい場合があります。 Apache が自身の設定にどの php.ini ファイルを使用しているかわからないことは、セキュリティ上の問題です。ただし、正しいエラー レベルが設定されるように Apache で PHP 変数を構成する方法があります。

また、サーバー側でこれらの構成変数を設定して、php.ini ファイルをオーバーライドまたはプリエンプトして、より高いレベルのセキュリティを提供する方法を知っておくと良いでしょう。
Apache を構成するときは、/conf/httpd.conf にある http.conf ファイルの基本構成にすでに触れている必要があります。

php.ini ファイルで既に行ったことを行うには、次の行を httpd.conf に追加し、php.ini ファイルを上書きします。 php_flag display_errors on
php_value error_reporting 2039
これにより、php.ini ファイルに既に設定されている display_errors のフラグと error_reporting の値がオーバーライドされます。値 2039 は E_ALL および ~E_NOTICE を表します。 E_ALL を使用する場合は、値を 2047 に設定します。繰り返しますが、Apache を再起動する必要があります。
次に、サーバー上でエラー報告をテストする必要があります。

error_reporting() 関数に関しては、一部のエラー メッセージをシールドできますが、PHP コアに起因するエラーはシールドできません。PHP コアに起因するエラーは、書き込み形式に従っていないため、PHP ファイルのコンパイルが失敗する直接の原因となるためです。コーディングルールによって引き起こされるPHPのエラーはブロックできません

コードをコピーします コードは次のとおりです:
* 現時点では、E_STRICT モードの警告は回避してください
* (これは関数定義の前に行う必要があります)
*/
if (定義('E_STRICT')) {
$old_error_reporting = エラー_レポート(0); if ($old_error_reporting & E_STRICT) {
error_reporting($old_error_reporting ^ E_STRICT); } その他 {
エラーレポート($old_error_reporting); }
unset($old_error_reporting);

一般的なものは次のとおりです:
コードをコピーします コードは次のとおりです:
// すべてのエラー報告をオフにする すべてのエラーをオフにする

エラー報告(0);


//単純な実行エラーを報告する;単純な実行エラーを報告する
error_reporting(E_ERROR | E_WARNING | E_PARSE);

// E_NOTICE を報告することも有効です (初期化されていないことを報告するため

) // 変数、または変数名のスペルミスの検出…); いくつかの初期化されていない変数のレポートまたは変数名のスペルミスの検出が含まれます
error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);

//E_NOTICE を除くすべてのエラーを報告します
// これは php.ini に設定されたデフォルト値です; E_NOTICE を除くすべてのエラーを報告します これは php.ini に設定されたデフォルト値でもあります
error_reporting(E_ALL ^ E_NOTICE);

// すべての PHP エラーを報告します (PHP 3 ではビット単位 63 が使用される可能性があります);すべてのエラーを報告します
エラー報告(E_ALL);

// error_reporting(E_ALL) と同じ 上記と同じ

ini_set('error_reporting', E_ALL);


www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/632278.html技術記事 Windows 環境の場合: プログラムはもともと PHP チュートリアル 4.3.0 で正常に実行されていましたが、4.3.1 で多くのエラーが報告されるのはなぜですか? 一般的なプロンプトは次のとおりです。 たとえば、次のコードです。
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート