ホームページ  >  記事  >  バックエンド開発  >  phpライフサイクルの詳しい説明(図)

phpライフサイクルの詳しい説明(図)

不言
不言転載
2018-10-23 17:03:233997ブラウズ

この記事は、PHP ライフサイクルの詳細な説明 (図) を提供します。一定の参考価値があります。必要な友人が参照できます。お役に立てれば幸いです。

  • 最初のプロセスはモジュール初期化フェーズ (MINIT) であり、SAPI ライフ サイクル全体 (Apache の開始後のライフ サイクル全体や実行プロセス全体など) で発生します。コマンド ライン プログラムの)、このプロセスは 1 回だけ実行されます。 2 番目のプロセスは、リクエスト フェーズで発生するモジュール アクティベーション フェーズ (RINIT) です。たとえば、URL を通じてページがリクエストされた場合、各リクエストの前にモジュールのアクティベーションが実行されます (RINIT リクエストの開始)

  • リクエストが到着すると、PHP は、PHP の実行中に変数名と値の内容を保存するシンボル テーブルやシンボル テーブルなどの実行環境を作成するなど、スクリプトを実行するための基本的な環境を初期化します。現在のすべての関数、クラス、その他の情報が含まれます。次に、PHP はすべてのモジュールの RINIT 関数を呼び出します。この段階で、各モジュールはいくつかの関連操作も実行できます。

  • 一般的に、スクリプトは最後まで実行されるか、exit( ) または die() 関数を使用すると、PHP はすべて最終段階に入ります。開始フェーズに対応して、終了フェーズも 2 つのステージに分かれており、1 つはリクエストの完了後にモジュールを非アクティブにする (RSHUTDOWN、RINIT に相当)、もう 1 つは SAPI ライフ サイクルの終了時にモジュールを閉じる ( Web サーバーが終了するか、コマンド ライン スクリプトが実行されて終了します) (MSHUTDOWN、MINIT に対応)

#単一プロセス SAPI ライフ サイクル

##開始 - リクエストの開始 - リクエストのクローズ - 終了

  • phpライフサイクルの詳しい説明(図)

    ##スタートアップ
#各モジュールのモジュール初期化を呼び出す前に、次のような初期化プロセスが行われます。

多数のグローバル変数を初期化する

  • Initialize多数の定数

  • Zend エンジンとコア コンポーネントの初期化

  • ここでの初期化操作には、メモリ管理の初期化、グローバル関数ポインタの初期化 (たとえば、 PHPソースファイルの字句解析、構文解析、中間コードで実行される関数ポインタの代入、複数のHashTable(関数テーブルや定数テーブルなど)の初期化、iniの準備ファイル解析、PHP ソース ファイル解析の準備、組み込み関数の登録 (strlen、define など)、標準定数の登録 (E_ALL、TRUE、NULL など)、GLOBALS グローバル変数の登録など。

php.ini の解析

  • グローバル操作関数の初期化

  • 静的にビルドされたモジュールと共有モジュール (MINIT)

  • これらのモジュールを登録済みモジュール リスト (module_registry) に登録します。登録されたモジュールがすでに登録されている場合、PHP は Module XXX がすでにロードされているというエラーを報告します。 1. 各モジュールに含まれる関数を関数テーブル(CG(function_table))に登録します 関数を追加できない場合は、関数を登録できません、ロードできませんと報告されます。

    組み込みモジュールと追加モジュールの次のステップは、共有オブジェクト (DLL など) と php.ini ファイルを通じて柔軟に設定される拡張機能を登録することです。
すべてのモジュールが登録されると、PHP はすぐにモジュールの初期化操作 (zend_startup_modules) を実行します。プロセス全体は、各モジュールを順番に走査し、各モジュールのモジュール初期化関数を呼び出すことです。これは、このセクションで前述したマクロ PHP_MINIT_FUNCTION に含まれるものです。

ファイル関連のコンテンツを処理した後、PHP は php_request_startup を呼び出してリクエストの初期化操作を実行します。リクエスト初期化操作では、図に示す各モジュールのリクエスト初期化関数の呼び出しに加えて、その他の多くの作業も行われます。主な内容は次のとおりです。 #PHP 上記の変数の一部に加えて、実行環境にはエラー処理、例外処理などもあり、これらはすべてここで初期化されます。 php.ini で設定された zend_extensions も調べられ、ここで activate 関数が呼び出されます。

SAPI のアクティブ化

    環境の初期化

ここでの環境の初期化とは、ユーザー空間で使用する必要があるいくつかの環境変数の初期化を指します。ここでの環境には、サーバー環境、リクエスト データ環境などが含まれます。実際に使用する変数は ## です。 #P#OST# ##_得る、####################################### ####### #COOKIE_サーバー、#E NV _ファイル。 モジュールリクエストの初期化実行DEACTIVATION PHP がリクエストを閉じるプロセスは、いくつかの終了操作のセットであり、このセットは php_request_shutdown 関数内に存在します。このコレクションには次のものが含まれます:

register_shutdown_function() を通じて登録されたすべての関数を呼び出します。シャットダウン時に呼び出されるこれらの関数はユーザー空間に追加されました。簡単な例として、スクリプト エラーが発生したときに統合関数を呼び出して、ユーザーによりわかりやすいページを提供することができます。これは Web の 404 ページに似ています。
利用可能なすべての __destruct 関数を実行します。ここでのデストラクタには、オブジェクト プール内のすべてのオブジェクトのデストラクタ (EG (objects_store)) と EG の各要素のデストラクタ (symbol_table) が含まれます。
すべての出力をフラッシュします。
HTTP 応答ヘッダーを送信します。これも、文字列を出力するプロセスですが、この文字列は特定の仕様に準拠している可能性があります。
各モジュールのシャットダウン要求メソッドをトラバースし、モジュールのシャットダウン要求操作を実行します。これが、各拡張機能の RSHUTDOWN を呼び出す図に示されているものです。
グローバル変数テーブル (PG (http_globals)) の変数を破棄します。
zend_deactivate 関数を使用して、字句アナライザー、構文アナライザー、および中間コード実行プログラムをオフにします。
各拡張機能の RSHUTDOWN ポスト RSHUTDOWN 関数を呼び出します。ただし、基本的にはすべての拡張 post_deactivate_func 関数ポインタが NULL です。
SAPI を閉じ、sapi_deactivate を通じて SG (sapi_headers)、SG (request_info) などの内容を破棄します。
ストリームのラッパーを閉じ、ストリーム フィルターを閉じます。
Turnメモリ管理をオフにします。
最大実行時間をリセットします。

終了

いよいよ終了です。

フラッシュ
sapi_flush は最後のコンテンツをフラッシュします。sapi_module.flush を呼び出します。これは、CLI モードの fflush 関数に相当します。

Zend エンジンを閉じる
zend_shutdown は、 Zend エンジン。


以上がphpライフサイクルの詳しい説明(図)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcsdn.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。