1. PHP 動作モード:
PHP の 2 つの動作モードは、WEB モードと CLI モードです。モードに関係なく、PHP は SAPI として実行され、同じように動作します。
1. ターミナルに php コマンドを入力すると、CLI が使用されます。
Web サーバーが PHP をサポートしてリクエストを完了するのと似ており、リクエストが完了すると制御がターミナルに戻ります。
2. Apache または別の Web サーバーをホストとして使用している場合、リクエストが到着すると、PHP はリクエストの完了をサポートします。一般:
マルチプロセス (通常、PHP リクエストを処理するために Apache モジュールにコンパイルされます)
マルチスレッド モード
簡単な実行プロセス:
1 。 Apache の起動時に PHP が実行されます;
2. PHP は mod_php5.so モジュール (具体的には、サーバー アプリケーション プログラミング インターフェイスである SAPI) を通じて Apache に接続されます;
3. PHP には合計 3 つのモジュールがあります: カーネル、Zend エンジン、および拡張レイヤー;
4. PHP カーネルは、リクエスト、ファイル ストリーム、エラー処理、およびその他の関連操作を処理するために使用されます;
5. Zend エンジン (ZE) は、ソース ファイルの変換に使用されますそれを機械語に変換し、仮想マシン上で実行します;
6. 拡張層は、PHP が特定の操作を実行するために使用する関数、クラス ライブラリ、およびストリームのセットです。たとえば、MySQL データベースに接続するには MySQL 拡張機能が必要です;
7. ZE がプログラムを実行するとき、いくつかの拡張機能に接続する必要がある場合があります。この時点で、ZE は制御を拡張機能に渡して返します。特定のタスクの処理後;
8. 最後に、ZE はプログラムの実行結果を PHP カーネルに返し、PHP カーネルはその結果を SAPI 層に送信し、最終的にブラウザに出力します。
2. PHP 実行のいくつかの段階:
SAPI は次の段階を通じて PHP を実行します:
1. モジュール初期化段階 (モジュール init):
つまり、それぞれの拡張ソース コードの PHP_MINIT_FUNCTION のメソッドは、モジュールを初期化し、モジュールに必要ないくつかの変数を適用し、メモリを割り当てます。
2. リクエストの初期化フェーズ (Request init):
クライアントのリクエストを受信した後、各拡張 PHP_RINIT_FUNCTION のメソッドが呼び出され、PHP スクリプトの実行環境が初期化されます。
3. PHP スクリプトを実行します。
4. シャットダウンをリクエストします。
この時点で、各拡張機能の PHP_RSHUTDOWN_FUNCTION メソッドが呼び出されてリクエスト サイトがクリーンアップされ、ZE は変数とメモリのリサイクルを開始します。
5. モジュールのシャットダウン:
Web サーバーが終了するか、コマンド ライン スクリプトが実行されて終了すると、拡張ソース コード内の PHP_MSHUTDOWN_FUNCTION メソッドが呼び出されます
3. SAPI ライフ サイクルはさまざまな環境下で行われます。状況。
1. 単一プロセス SAPI ライフサイクル。 (CGI)
CLI/CGI モード PHP はシングルプロセス SAPI モードに属します。このタイプのリクエストは、リクエストを一度処理した後に閉じられます。つまり、各リクエストは開始 - リクエスト開始 - リクエストクローズ - 終了というステップを繰り返します。拡張機能の初期化により多くのリソースが消費されることがわかります。
2. マルチプロセス SAPI ライフサイクル。 (MPM の perfork メソッド)
通常、PHP は、PHP リクエスト (mod_php) を処理するために Apache のモジュールにコンパイルされます。 Apache は一般的にマルチプロセス モードを採用しており、Apache が起動されると、複数の子プロセスをフォークアウトします (フォークアウトを開始するプロセスの数を Apache が指定できます)。各プロセスのメモリ空間は独立しており、各子プロセスは fock されるとすぐに開始ステージと終了ステージを通過します。
3. マルチスレッド SAPI ライフサイクル。 (FastCGI または MPM 作業モードの単一プロセス)
マルチスレッド モードは、マルチプロセスのプロセスに似ています。このモードでは、サーバー プロセスが 1 つだけ実行されますが、多くのスレッドが同時に実行されます。これにより、リソースのオーバーヘッドが軽減され、コストが削減されます。モジュールの初期化とモジュールのシャットダウン。実行する必要があるのは 1 回のみで、一部のグローバル変数は初期化する必要があります。スレッドの固有の特性により、リクエスト間で一部のデータを簡単に共有できます。
PHP 関連の技術記事の詳細については、PHP チュートリアル 列にアクセスして学習してください。
以上がPHPのライフサイクルの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。