この記事では、PHP コンテンツの動作を含む PHP の基本的な動作メカニズムを詳細に説明し、起動から停止までの PHP のライフサイクル全体を例を示して説明します。
はじめに
PHP 関連プロセスを手動で開始したことはありません。PHP は、mod_php5.so モジュール (具体的には、サーバー アプリケーション プログラミング インターフェイス) を通じて Apache に接続されており、
合計 3 つのモジュールがあります。カーネル、Zend エンジン、および拡張レイヤー。PHP カーネルは、リクエスト、ファイル ストリーム、エラー処理、およびその他の関連操作を処理するために使用されます。Zend エンジン (ZE) は、ソース ファイルをマシン言語に変換して仮想マシン上で実行するために使用されます。拡張層は、PHP が特定の操作を実行するために使用する関数、ライブラリ、およびストリームのセットです。たとえば、MySQL データベースに接続するには mysql 拡張機能が必要ですが、ZE がプログラムを実行するときに、いくつかの拡張機能に接続する必要がある場合があります。このとき、ZE は制御を拡張機能に渡し、特定のタスクの処理後に制御を返します。 ;
最後に、ZE はプログラムの実行結果を PHP カーネルに返し、PHP カーネルはその結果を SAPI 層に送信し、最終的にブラウザに出力します。
現実の内部構造
を掘り下げるのは
それほど簡単ではありません。上記のプロセスは単なる簡略化されたバージョンです。舞台裏で他に何が起こっているのかをもう少し詳しく見てみましょう。
◆Apache が起動すると、PHP インタープリタも起動します。
◆PHP の起動プロセスは 2 つのステップで構成されます。
最初のステップは、いくつかの環境変数を初期化することです。これは、SAPI ライフサイクル全体にわたって有効になります。
2 番目のステップは、現在のリクエストにのみ固有のいくつかの変数設定を生成することです。
PHP を開始するときの最初のステップが
わからない場合、最初のステップと 2 番目のステップは何ですか?心配しないでください。これについては次に詳しく説明します。まず、最初の最も重要なステップを見てみましょう。覚えておくべきことは、操作の最初のステップはリクエストが到着する前に行われるということです。
Apache の起動後、PHP インタープリタも起動し、
PHP は各拡張機能の MINIT メソッドを呼び出し、これらの拡張機能を使用可能な状態に切り替えます。 php.ini ファイルでどのような拡張子が開かれているかを確認してください。MINIT は「モジュールの初期化」を意味します。各モジュールは、他のリクエストを処理するための関数、クラス ライブラリなどのセットを定義します。
一般的な MINIT メソッドは次のとおりです。
PHP_MINIT_FUNCTION(extension_name){
/* 関数、クラスなどを初期化します */
}
PHP は 2 番目のステップを開始し、
ページ要求が発生すると、SAPI 層が制御を PHP 層に渡します。したがって、PHP は、このリクエストに応答するために必要な環境変数を設定します。同時に、実行中に生成された変数名と値を保存する変数テーブルも作成します。
PHP は各モジュールの RINIT メソッド、つまり「リクエストの初期化」を呼び出します。典型的な例はセッション モジュールの RINIT です。セッション モジュールが php.ini で有効になっている場合、$_SESSION 変数は初期化され、モジュールの RINIT
メソッド
が呼び出されたときに関連するコンテンツが読み込まれます。準備プロセスはプログラムの実行の間に自動的に開始されます。
一般的な RINIT メソッドは次のとおりです。
PHP_RINIT_FUNCTION(extension_name) {
/* セッション変数の初期化、変数の事前設定、グローバル変数の再定義など */
}
PHP のシャットダウンの最初のステップは、
PHP の起動と同じです。PHP のシャットダウンも 2 つのステップに分かれています。
ページが実行されると (ファイルの最後に到達するか、exit または die 関数で終了するかに関係なく)、PHP が開始されます。クリーンアッププロセス。各モジュールの RSHUTDOWN メソッドを順番に呼び出します。
RSHUTDOWN は、プログラムの実行中に生成されたシンボル テーブルをクリアする、つまり各変数の unset 関数を呼び出すために使用されます。
一般的な RSHUTDOWN メソッドは次のとおりです。
PHP_RSHUTDOWN_FUNCTION(extension_name) {
/* メモリ管理を行い、最後の PHP 呼び出しなどで使用されたすべての変数の設定を解除します */
}
PHP shutdown の 2 番目のステップ
、すべてのリクエストが処理され、SAPI はシャットダウンの準備が整います。PHP は、
各拡張機能の MSHUTDOWN メソッドを呼び出します。これが各モジュールにとって最後の機会です。記憶を解放するために。
一般的な RSHUTDOWN メソッドは次のとおりです。
PHP_MSHUTDOWN_FUNCTION(extension_name) {
/* 空きハンドラーや永続メモリなど */
}
このようにして、PHP のライフサイクル全体が終了します。なお、「第1ステップの開始」と「第2ステップの終了」はサーバからのリクエストがない場合のみ実行されます。