検索
ホームページ类库下载PHP类库私たちが知る必要があるのは、PHP の間違った構成は何かということです。 PHPエラーメカニズムのまとめ

再版するときは出典を示してください: PHP の間違った構成について何を知っておく必要がありますか? PHP のエラーメカニズムの概要 (再版)
// 厳格な基準: /tmp/php/index.php の 17 行目で変数のみが参照によって渡されるべきであるfunction change (&$var) {
$var += 10;
}


$var = 1;
change(++$var);// E_STRICT
E_RECOVERABLE_ERROR
このレベルは実際には ERROR レベルですが、エラー処理でキャプチャされない場合は、パフォーマンスがキャプチャされます。の E_ERROR と同じ。
仮パラメータで型を定義しているのに、呼び出し時に間違った型が渡された場合によく発生します。そのエラー リマインダーには、E_ERROR の致命的なエラーの前に Catachable という単語もあります。
//キャッチ可能な致命的なエラー: testCall() に渡される引数 1 は、A のインスタンス、指定された B のインスタンス、/tmp/php/index.php の 37 行目で呼び出され、/tmp/php/index.php で定義されている必要があります。 33 行目class A {
}class B {
}function testCall(A $a) {
}


$b = new B();
testCall($b);
E_DEPRECATED
このエラーは、An を使用したことを意味しますこの機能の古いバージョンとそれ以降のバージョンは無効になっているか、メンテナンスされていない可能性があります。
たとえば、curl の CURLOPT_POSTFIELDS は @FILENAME を使用してファイルをアップロードします
// 非推奨:curl_setopt(): ファイルのアップロードに @filename API を使用することは非推奨です。代わりに /tmp/php/index.php で CURLFile クラスを使用してください。 42行目$ch =curl_init("http://www.remotesite.com/upload.php");
curl_setopt($ch, CURLOPT_POSTFIELDS, array('fileupload' => '@'. "test")); E_CORE_ERROR、E_CORE_WARNING
これら 2 つのエラーは PHP エンジンによって生成され、PHP の初期化プロセス中に発生します。
E_COMPILE_ERROR、E_COMPILE_WARNING
これら 2 つのエラーは PHP エンジンによって生成され、コンパイル プロセス中に発生します。
E_USER_ERROR、E_USER_WARNING、E_USER_NOTICE、E_USER_DEPRECATED、
これらのエラーはすべてユーザーによって引き起こされます。これは、try catch 例外を回避する良い方法です。
trigger_error("Cannot除算ゼロ", E_USER_ERROR);// E_USER_ERROR// E_USER_WARING// E_USER_NOTICE// E_USER_DEPRECATED
E_ALL
E_STRICT すべてのエラーおよび警告メッセージが出力されます。
エラー制御
phpには、エラーやエラーログの表示を制御できる設定やパラメータが多数あります。最初のステップとして、PHP の間違った設定は何なのかを知る必要があります。
php+php-fpm モデルに従っています。実際には、php エラーの表示に影響する 2 つの設定ファイルがあります。1 つは php 自体の設定ファイル php.ini で、もう 1 つは php-fpm の設定ファイルです。 php-fpm.conf。
php.iniでの設定
error_reporting = E_ALL // エラーレベル、どのレベルをレポートします error_log = /tmp/php_errors.log // phpでのエラー表示のログ位置 display_errors = On // 出力にエラーを表示するかどうか、この出力ページである場合もあれば、stdoutdisplay_startup_errors = On // 起動プロセスのエラー情報をページに表示するかどうかは、起動中に発生する上記のコア タイプのエラーがいくつかあることに注意してください。ページを表示します。 log_errors = On // エラー ログを記録するかどうか log_errors_max_len = 1024 // エラー ログの最大長ignore_repeat_errors = Off // 繰り返されるエラーを無視するかどうか track_errors = Off // グローバル変数 $php_errormsg を使用して最後のエラーを記録するかどうか xmlrpc_errors = 0 / /エラーを記録するために XML-RPC エラー メッセージ形式を使用するかどうか xmlrpc_error_number = 0 //XML-RPC の fastCode 要素の値として使用されます。 html_errors = On // 出力内の関数およびその他の情報を HTML リンクに変換するかどうか docref_root = http://manual/en/ // html_errors がオンの場合、このリンクのルート パスは何ですか fastcgi.logging = 0 // PHP エラーを fastcgi にスローするかどうか
よく尋ねられるのですが、error_reporting と display_errors の違いは何ですか?これら 2 つの機能はまったく異なります。
PHPはデフォルトでログと標準出力を行います(fpmモードの場合、標準出力はページです)
error_reportingのパラメータはエラーレベルです。どのレベルでエラーが発生するかを示します。すべてのエラー レベルでエラーをトリガーする必要がないことを PHP に指示した場合、ログにもページにもこのエラーは表示されません。これは何も起こっていないことと同じです。
display_errors は、エラー メッセージを標準出力に表示するかどうかを制御します。
log_errors は、エラー メッセージをログに記録するかどうかを制御します。
error_log はエラーログが表示される場所です。これは php-fpm で書き換えられることが多いため、cli と fpm のエラーログが同じファイルにないことがよくあります。
ignore_repeat_errors このマークは、次のプログラムのように、重複したログがある場合に 1 つだけが記録されるように制御します:
error_reporting(E_ALL);
ini_set('ignore_repeat_errors', 1);
ini_set('ignore_repeat_source', 1) ;$a = $c; $a = $c; //E_NOTICE
//注意: /tmp/php/index.php の 20 行目の未定義変数: c は 2 回表示されますが、現在は 2 回のみ表示されます。一度は起こります...
track_errors を有効にすると、最後のエラー情報が変数に保存されます。これは、ログを記録するときに役立つ可能性があります。しかし、それは本当に役に立たないと思います... html_errors と docref_root は非常にユーザーフレンドリーな設定であり、これら 2 つのパラメータを設定した後、返されるエラー メッセージにドキュメント内の情報が含まれている場合は、リンク形式になります。
error_reporting(E_ALL);ini_set('html_errors', 1);ini_set('docref_root', "https://secure.php.net/manual/zh/");include("a2.php"); E_WARNING
ページ表示:
これにより、エラーが発生した場所をすぐに見つけることができます。人間的ですね~
php-fpmの設定
error_log = /var/log/php-fpm/error.log // php-fpm自身のログ log_level = Notice // php-fpm自身のログレベル php_flag[ display_errors] = off // php.ini の設定変数をオーバーライドします。これは、プログラム内の ini_set によってオーバーライドできます。 php_value[display_errors] = off // php_flagphp_admin_value[error_log] と同じ = /tmp/www-error.log // php A を上書きします。 .ini の設定変数は、プログラム内の ini_set によって上書きできません。 php_admin_flag[log_errors] = on // php_admin_valuecatch_workers_output = yes // fpmworker の出力をキャプチャするかどうか request_slowlog_timeout = 0 // 遅いログの持続時間 throwlog = /var/log /php-fpm/www-slow.log // 遅いロギング
php-fpm の設定には error_log 設定もありますが、これは php.ini の error_log 設定とよく混同されます。ただし、記録される内容は異なります。php-fpm の error_log は、fpm の起動や終了など、php-fpm 自体のログのみを記録します。
php.iniのerror_logはphpプログラム自体を記録するエラーログです。
したがって、php-fpm の php.ini の error_log 設定を上書きするには、次の関数を使用する必要があります:
php_flag
php_value
php_admin_flag
php_admin_value
これらの 4 つの関数 admin の 2 つの関数は、この変数が設定された後は使用できないことを示します。 ini_set を使用して、コード内でこの変数を再割り当てします。 php_flag/value は引き続き php コードの ini_set に基づいています。
スローログは fpm によって記録されます。 request_slowlog_timeout 設定を使用して、スローログの期間を決定できます。
まとめ
私たちがよく混乱するのは、ログの問題と、特定のレベルのログがログに記録されない理由です。最も重要なことは、error_log、display_errors、log_errors の 3 つの構成を確認することです。ただし、構成を確認する際には、php.ini の構成と php- の構成を区別することにも注意する必要があります。 fpm.ini。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン