ホームページ  >  記事  >  バックエンド開発  >  PHP エラー処理、自動ロード、スタック メモリ、実行モードの簡単な分析

PHP エラー処理、自動ロード、スタック メモリ、実行モードの簡単な分析

零到壹度
零到壹度オリジナル
2018-04-12 10:30:002057ブラウズ

この記事の内容は、PHP のエラー処理、自動読み込み、スタック メモリ、動作モードの簡単な分析を共有することです。必要な方は参考にしてください。 Php

エラー処理

Phpエラーレベル

E_ERROR 致命的なエラー。値は 1E_WA です。 RNING 警告エラー。プロンプトを表示します、終了しません 実行値は 2 です

E_PARSE コンパイル時の構文解析エラー 解析エラーはパーサーによってのみ生成されます。値は 4

E_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 (常駐 CGI / ロングライブ CGI)
  1. FastCGI は、ロングライブ CGI のようなものです。これがアクティブ化されると、毎回フォークするのに時間がかかりません (これは CGI の最も批判されているフォークして実行モードです)。

FastCGI は、HTTP サーバーと動的スクリプト言語間の通信のためのスケーラブルな高速インターフェイスです。 Apache、Nginx、lighttpd などのほとんどの一般的な HTTP サーバーは FastCGI をサポートしています。同時に、FastCGI は PHP などの多くのスクリプト言語でもサポートされています。

FastCGI インターフェースは C/S 構造を採用しており、HTTP サーバーとスクリプト解析サーバーを分離し、スクリプト解析サーバー上で 1 つ以上のスクリプト解析デーモンを同時に起動できます。 HTTP サーバーが動的プログラムに遭遇するたびに、そのプログラムは実行のために FastCGI プロセスに直接配信され、その結果がブラウザーに返されます。この方法により、HTTP サーバーは静的リクエストを排他的に処理したり、動的スクリプト サーバーの結果をクライアントに返すことができるため、アプリケーション システム全体のパフォーマンスが大幅に向上します。

Php-fpm は php

に付属する fastcgi マネージャーです

3) CLI (コマンドラインインターフェース)

  1. 4. Webモジュールモード(ApacheなどのWebサーバーが動作するモード)

このモードは、Apacheのcgi Extensionをベースにしたバージョンです5. ISAPI (Internet Server Application Program Interface) は、Microsoft が提供する WEB サービス用の API インターフェイスのセットであり、CGI が提供するすべての機能を実現できます。フィルタアプリケーションインターフェースを提供するなど、それをベースにした拡張が行われています。 ISAPI アプリケーションは、ほとんどの場合、ユーザーの要求後に実行できる DLL 動的ライブラリの形式で使用されます。これらは、ユーザーの要求を処理した後すぐには消えませんが、メモリ内に常駐し続け、他のユーザーの入力を待ちます。処理される。また、ISAPI DLLアプリケーションとWEBサーバーが同一プロセスにあるため、CGIに比べて大幅に効率が高くなります。

    Php2
  1. web

  2. server

:

との対話のようなもの Nginx:ユーザーがリクエストを開始し、nginx のnginx がそれを受信すると、処理のために php-fpm にプッシュされ、php-fpm がビジー状態の場合、nginx は 504 getway を返します

Apache:

イベント、

異なるモードに応じて異なる処理プロセスとスレッドを作成し、関連するphpを受信すると、処理のためにApacheモジュールに渡されます

以上がPHP エラー処理、自動ロード、スタック メモリ、実行モードの簡単な分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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