ホームページ > バックエンド開発 > PHPチュートリアル > Crystal Report PHP シールド エラーを変更するための PHP の error_reporting 関数の使用法

Crystal Report PHP シールド エラーを変更するための PHP の error_reporting 関数の使用法

WBOY
リリース: 2016-07-29 08:45:55
オリジナル
1185 人が閲覧しました

今日 CI フレームワークを学習中に問題が発生しました:
PHP エラーが発生しました
重大度: 通知
メッセージ: 未定義の変数: ユーザー
一般に、未定義の宣言された変数がデフォルトの通常の PHP ファイルに出力されても、エラーは報告されません。ただし、初心者はコード内でこのエラー メッセージをブロックする方法を考え始めているため、これは codeigniter フレームワークで報告する必要があります。 @ ですが、@ はパフォーマンスを大幅に低下させると多くの人が言っています...
最後に、codeigniter が意図的にこのエラー メッセージを表示したのではないかと思いました。この種のエラーをブロックするにはどうすればよいでしょうか? codeigniter が Notice 情報を表示するのを妨げているのでは?」と思って、急に理解しました。index.php というエントリの error_reporting(E_ALL); が問題を引き起こしていることがわかりました。これをブロックするには、
error_reporting(E_ALL ^ E_NOTICE);
に変更するだけです。他のエラーレポートには影響しません。
error_reporting() は、PHP のエラーレベルを設定し、現在のレベルを返します。
構文
error_reporting(report_level)
パラメータレベルが指定されていない場合は、現在のエラーレベルが返されます。レベルに指定できる値は次のとおりです:
1 E_ERROR
2 E_WARNING
4 E_PARSE
8 E_NOTICE
16 E_CORE_ERROR
32 E_CORE_WARNING
64 E_COMPILE_ERROR
128 E_COMPILE_WARNING
2 56 E_USE R_ERROR
512 E_USER_WARNING
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 Error Reporting
php.ini ファイルには多くの構成設定があります。 Linux への PHP および Apache 2 のインストールに関するドキュメントに示されているように、php.ini ファイルがすでにセットアップされ、適切なディレクトリに配置されている必要があります。 PHP アプリケーションをデバッグするときに注意すべき構成変数が 2 つあります。 2 つの変数とそのデフォルト値は次のとおりです:
display_errors = Off
error_reporting = E_ALL
これら 2 つの変数の現在のデフォルト値は、php.ini ファイル内で検索することで見つけることができます。 display_errors 変数の目的は明らかです。この変数は、エラーを表示するかどうかを PHP に指示します。デフォルト値はオフです。ただし、開発プロセスを容易にするために、この値を On に設定します。
display_errors = On
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 = error_reporting(0);
}
unset($old_error_reporting);


一般的なものは次のとおりです:



コードは次のとおりです:



// すべてのエラーをオフにします

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 を除く E_NOTICE これは php.ini のデフォルト設定でもあります
error_reporting(E_ALL ^ E_NOTICE);
// すべての PHP エラーを報告します (PHP 3 ではビットごとの 63 が使用される場合があります)
error_reporting(E_ALL);
// error_reporting(E_ALL) と同じ; 上記と同じ
ini_set('error_reporting', E_ALL);
上記では、クリスタル レポートの内容を含め、クリスタル レポート PHP の error_reporting 関数を使用して PHP シールド エラーを修正する方法を紹介しました。PHP チュートリアルに興味のある友人にとって役立つことを願っています。


関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート