PHP 動作モード:
PHP の 2 つの動作モードは、WEB モードと CLI モードです。モードに関係なく、PHP は SAPI として実行され、同じように動作します。
1. ターミナルに php コマンドを入力すると、CLI が使用されます。
Web サーバーが PHP をサポートしてリクエストを完了するのと似ており、リクエストが完了すると制御がターミナルに戻ります。
2. Apache または別の Web サーバーをホストとして使用している場合、リクエストが到着すると、PHP はリクエストの完了をサポートします。一般:
複数のプロセス (通常、PHP リクエストを処理するために Apache モジュールとしてコンパイルされます)
マルチスレッド モード
簡単な実行プロセス:
1. PHP は Apache の起動とともに実行されます;
2. PHP は mod_php5.so モジュールを通じて Apache に接続されます (具体的には SAPI (サーバー アプリケーション プログラミング インターフェイス);
3. PHP には合計 3 つのモジュールがあります: カーネル、Zend エンジン、および拡張レイヤー;
4. PHP カーネルはリクエストの処理に使用されます。ファイル ストリーム、エラー処理およびその他の関連操作;
5. Zend Engine (ZE) は、ソース ファイルを機械語に変換し、仮想マシン上で実行するために使用されます;
6. 拡張レイヤーはセットですPHP が特定の操作を実行するために使用する関数、ライブラリ、およびストリームのセット。たとえば、MySQL データベースに接続するには MySQL 拡張機能が必要です;
7. ZE がプログラムを実行するとき、複数の拡張機能に接続する必要がある場合があります。この時点で、ZE は制御を拡張機能に渡します特定のタスクの処理後にそれを返します;
8. 最後に、ZE はプログラムの実行結果を PHP カーネルに返し、PHP カーネルは結果を SAPI 層に送信し、最終的にブラウザに出力します。
PHP 実行のいくつかの段階:
SAPI は次の段階を通じて PHP を実行します:
1. モジュール初期化フェーズ ( Module init):
つまり、各拡張ソース コードの PHP_MINIT_FUNCTION 内のメソッドを呼び出して、モジュールの初期化、モジュールに必要ないくつかの変数の適用、メモリの割り当てなどを行います。
2. リクエスト初期化フェーズ (Request init):
クライアントのリクエストを受信した後、各拡張 PHP_RINIT_FUNCTION のメソッドが呼び出され、PHP スクリプトの実行環境が初期化されます。
3. PHP スクリプトの実行
4. シャットダウンのリクエスト:
このとき、各拡張機能の PHP_RSHUTDOWN_FUNCTION メソッドが呼び出され、リクエスト サイトがクリーンアップされ、ZE が開始されます。変数とメモリをリサイクルします。
5. モジュールのシャットダウン:
拡張ソース コード内の PHP_MSHUTDOWN_FUNCTION メソッドは、Web サーバーが終了するか、コマンド ライン スクリプトが実行されるときに呼び出されます。
さまざまな状況における 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 回だけ実行する必要があります。一部のグローバル変数は 1 回だけ初期化する必要があります。スレッドの固有の特性により、リクエスト間で一部のデータを共有すると便利です。可能です。関連する推奨事項:
PHP ビデオ チュートリアル://m.sbmmt.com/course/list/29/ type/2.html
以上がPHP ライフサイクルの概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。