この記事の内容は、PHP のエラー処理、自動読み込み、スタック メモリ、動作モードの簡単な分析を共有することです。必要な方は参考にしてください。Php
エラー処理
Phpエラーレベル
E_ERROR 致命的なエラー。値は 1E_WA です。 RNING 警告エラー。プロンプトを表示します、終了しません 実行値は 2 です
E_PARSE コンパイル時の構文解析エラー 解析エラーはパーサーによってのみ生成されます。値は 4E_NOTICE です。スクリプトでエラーが発生した可能性があることを示します。値は 8
E_CORE_ERROR です。PHP の初期化起動プロセス中に発生した致命的なエラーです。このエラーは E_ERROR に似ていますが、PHP エンジン コアによって生成されます。 値は 16 です
E_CORE_WARNING PHP の初期化起動中に発生した警告 (致命的ではないエラー)。 E_WARNING に似ていますが、PHP エンジン コアによって生成されます。 値は 32 です
E_COMPILE_ERROR 致命的なコンパイル時エラー。 E_ERROR に似ていますが、Zend スクリプト エンジンによって生成されます。値は 64
E_COMPILE_WARNING コンパイル時警告 (致命的ではないエラー) です。 E_WARNING に似ていますが、Zend スクリプト エンジンによって生成されます。値は 128 です。
E_USER_ERROR ユーザーが生成したエラー メッセージ。 E_ERROR に似ていますが、ユーザーがコード内で PHP 関数trigger_error()を使用して生成されます。値は 256 です。
E_USER_WARNING ユーザーによって生成された警告メッセージ。 E_WARNING に似ていますが、コード内で PHP 関数trigger_error()を使用してユーザーによって生成されます。値は 512 です
E_USER_NOTICE ユーザーによって生成された通知情報。 E_NOTICE に似ていますが、コード内で PHP 関数trigger_error()を使用してユーザーによって生成されます。値 1024
E_STRICT を指定すると、PHP が推奨するコードへの変更が有効になり、コードの最高の相互運用性と上位互換性が保証されます。値は 2048
E_RECOVERABLE_ERROR で、キャッチされる可能性のある致命的なエラーです。 これは、潜在的に危険なエラーが発生したが、PHP エンジンが不安定になる原因ではなかったことを示します。 エラーがユーザー定義のハンドラー (set_error_handler() を参照) によって捕捉されない場合、E_ERROR となり、スクリプトは終了します。値は 4096
E_DEPRECATED ランタイム通知です。有効にすると、将来のバージョンで正しく動作しなくなる可能性があるコードについて警告が表示されます。値は 8192 です。
E_USER_DEPRECATED ユーザーが生成した警告メッセージ。 E_DEPRECATED と似ていますが、コード内で PHP 関数trigger_error()を使用してユーザーによって生成されます。 値 16384
E_ALL は、E_STRICT を除くすべてのエラーおよび警告メッセージを表します。 値は30719であり、エラーを表示またはマスクするためのビットワイズオペレーターの組み合わせ(バイナリ許可判断)
Php
エラーに関する構成
error_Reportingがエラーレポートのレベルをセット
、レベル設定は上記で確認できます
デフォルト値は E_ALL & ~E_NOTICE で、E_NOTICE と E_STRICT を除くすべてのエラーが表示されることを意味します
E_STRICT エラー レベルは E_ALL には含まれません、自分で明示的に有効にする必要がありますレベルは表示のみ可能です
PHP の外部でエラー レベル定数を使用しても意味がありません。代わりに、すべてのエラーを含む 2147483647 などの 10 進数を使用できます
。
display_errorsエラーを画面に出力するかどうか
ini_setを使ってリセットすることもできるが、phpで致命的なエラーが発生した場合には設定できない
display_startup_errors起動エラーを表示するかどうか
log_errorsスクリプトエラー情報がlog
log_errors_max_len に記録されるかどうか
log_errors の最大バイト数を設定します。エラーの原因に関する情報が error_log に追加されます。デフォルト値は 1024 です。0 に設定すると、長さに制限はありません。この長さの設定により、ログに記録されるエラー、表示されるエラー、および $php_errormsg が制限されます。
ignore_repeat_errors
繰り返しのエラーメッセージを記録しません。
ignore_repeat_source
繰り返しのメッセージを無視すると、メッセージのソースも無視されます。この設定がオンの場合、重複メッセージは、別のファイルによって生成されたのか、別のソース コード行によって生成されたのかを記録しません。
report_memleaks
このパラメータが Off に設定されている場合、メモリ リーク情報は (標準出力またはログに) 表示されません。このレポートは Posix プラットフォームの stderr に送信され、Windows では OutputDebugString() を使用してデバッガに送信され、» DbgView などのツールで表示できます。これはデバッグ コンパイルでのみ機能し、error_reporting が機能するには
track_errors
が含まれている必要があります。オンにすると、最後のエラーは常に変数 $php_errormsg に存在します。
html_errors
エラー メッセージ内の HTML タグを閉じます。この新しい HTML 形式のエラー メッセージはクリック可能で、エラーまたはエラーの原因となった機能を説明するリファレンス ページにユーザーを誘導します。 これらの参照は、docref_root および docref_ext の設定に関連しています。
error_prepend_string string
エラーメッセージの前に出力される内容。
error_append_string string
エラーメッセージの後に出力される内容。
error_log
スクリプトエラーを記録するファイルを設定します。このファイルは、Web サーバー ユーザーが書き込み可能である必要があります。特別な値 syslog が設定されている場合、エラー メッセージがシステム ロガーに送信されます。 Unix および同様のシステムでは syslog(3) が使用され、Windows NT のようなシステムではイベント ログが使用されます。システム ログは Windows 95 ではサポートされていません。参照: syslog()。この設定が設定されていない場合、エラー メッセージが SAPI エラー ロガーに送信されます。たとえば、Apache のエラー ログに表示されたり、CLI の stderr に送信されたりします。
エラー処理関連のメソッドと使用法についての個人的な理解
debug_backtrace - バックトレースの生成 (バックトレース) を設定して、返されるスタックの数を制限できます。この関数への呼び出しを検出するために使用されます。スタック情報は、TP の debug と同様に、トラブルシューティングに非常に役立ちますdebug_print_backtrace(); debug_backtrace と同様に、トレースバックを直接出力します。
error_clear_last — 最新のエラーをクリアします
error_get_last — 発生した最後のエラーを取得します
error_log - エラー情報を場所に送信します。エラーをファイルに保存できますが、エラー情報を null にすることはできません
error_reporting - PHP エラーの種類を設定しますphp.ini と同じように報告する必要があります。
restore_error_handler — 以前のエラー処理関数を復元します。
restore_Exception_handler — 以前に定義された例外処理関数を復元します。
set_error_handler — ユーザー定義のエラー処理関数を設定します。これはエラーの前に定義する必要があります。
次のレベルのエラーはユーザー定義関数では処理できません: E_ERROR、E_PARSE、E_CORE_ERROR、E_CORE_WARNING、E_COMPILE_ERROR 、E_COMPILE_WARNING、および set_error_handler() 関数が呼び出されるファイル内で生成されるほとんどの E_STRICT。
error_reporting の ini 設定でエラーの表示を制御できるのと同じように、2 番目のパラメーターを使用して error_handler のトリガーをブロックできます。 このマスクがないと、error_reporting の設定に関係なく、エラーごとに error_handler が呼び出されます。
set_Exception_handler — ユーザー定義の例外処理関数を設定します
trigger_error — ユーザーレベルのエラー/警告/通知メッセージを生成します
user_error — trigger_error
のエイリアス
register_shutdown_function PHP 終了スクリプトの後に実行される登録関数。最初のパラメーターは関数をサポートし、クラスとクラス メソッドをインスタンス化するステートメントを含む配列をサポートします (クラスは登録時に最初にインスタンス化されます)。 、エラーなし すべてキャプチャできます)
Php自動読み込み
個人的な洞察
spl_autoload_registerと__autoload違いは
__autoload だけですphpで一度しか使えない関数を定義してプラグインなどをロードしたい場合は、if else判定やcomposerをする必要があり、非常に面倒です
。フォルダーまたはプラグインに基づいてさまざまな処理機能をカスタマイズして、自動読み込みを作成できます。キューが完了するか true が返されるまで (ファイルが見つかった場合はデフォルトで true が返されます)、キューに従って検索されます。
スタックメモリ(個人的な理解)
スタック:ユーザー定義変数を格納するスタック: 関数で定義されたいくつかの基本型変数と参照変数オブジェクトのスコープを超えると、それらはすべてスタック空間にあります
補足情報:
Heap:
ファイル内で定義された変数が静的に変更されると、それらはグローバル データ領域に変更され、スタック メモリを占有しません
Stack:
スタック メモリには通常、関数呼び出し情報と関数内で宣言された変数が格納されます。関数呼び出しは再帰的であるため、外側の関数は、内側の呼び出される関数の前にロードされて実行される必要があり、内側の呼び出される関数が終了するまで待機する必要があります。この先入れ後出しメカニズムがスタック メモリと呼ばれる理由です。追記: コンパイル時、コンパイラーはまずこの関数で定義されているすべての変数を収集し、それらを関数の先頭に配置してメモリに適用します。したがって、スタックに配置される順序とスタックから配置される順序は次のとおりです。プログラム作成時に定義した順序ではなく、関数実行中にスタックを進め、関数実行完了後にスタックをポップアウトします。
その他:
Const、global、staticは変更後グローバルデータ領域に格納されますスーパーグローバル変数とグローバル変数は静的変数でグローバルデータに格納されますエリア
情報が少ないため、修正と改善を待っています
Phpweb実行モード
Php実行モード:
1) CGI (Universal Common Gateway Interface)は通常、EXE ファイルなどの実行可能プログラムであり、WEB サーバーはそれぞれ異なるプロセスを占有し、一般に CGI プログラムは 1 つのユーザー要求のみを処理できます。このように、ユーザー リクエストの数が非常に多い場合、メモリや CPU 時間などのシステム リソースが大量に占有され、パフォーマンスが低下します。
2.
FastCGI は、HTTP サーバーと動的スクリプト言語間の通信のためのスケーラブルな高速インターフェイスです。 Apache、Nginx、lighttpd などのほとんどの一般的な HTTP サーバーは FastCGI をサポートしています。同時に、FastCGI は PHP などの多くのスクリプト言語でもサポートされています。
FastCGI インターフェースは C/S 構造を採用しており、HTTP サーバーとスクリプト解析サーバーを分離し、スクリプト解析サーバー上で 1 つ以上のスクリプト解析デーモンを同時に起動できます。 HTTP サーバーが動的プログラムに遭遇するたびに、そのプログラムは実行のために FastCGI プロセスに直接配信され、その結果がブラウザーに返されます。この方法により、HTTP サーバーは静的リクエストを排他的に処理したり、動的スクリプト サーバーの結果をクライアントに返すことができるため、アプリケーション システム全体のパフォーマンスが大幅に向上します。
Php-fpm は php
に付属する fastcgi マネージャーです
3) CLI (コマンドラインインターフェース)
4.Webモジュールモード(ApacheなどのWebサーバーが動作するモード)
このモードは、Apacheのcgi Extensionをベースにしたバージョンです5. ISAPI (Internet Server Application Program Interface) は、Microsoft が提供する WEB サービス用の API インターフェイスのセットであり、CGI が提供するすべての機能を実現できます。フィルタアプリケーションインターフェースを提供するなど、それをベースにした拡張が行われています。 ISAPI アプリケーションは、ほとんどの場合、ユーザーの要求後に実行できる DLL 動的ライブラリの形式で使用されます。これらは、ユーザーの要求を処理した後すぐには消えませんが、メモリ内に常駐し続け、他のユーザーの入力を待ちます。処理される。また、ISAPI DLLアプリケーションとWEBサーバーが同一プロセスにあるため、CGIに比べて大幅に効率が高くなります。
web
:
との対話のようなものNginx:ユーザーがリクエストを開始し、nginx のnginx がそれを受信すると、処理のために php-fpm にプッシュされ、php-fpm がビジー状態の場合、nginx は 504 getway を返します
Apache:イベント、
異なるモードに応じて異なる処理プロセスとスレッドを作成し、関連するphpを受信すると、処理のためにApacheモジュールに渡されます
。
以上がPHP エラー処理、自動ロード、スタック メモリ、実行モードの簡単な分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。