PHP は実行開始後に 2 つの主なフェーズを経ます:
リクエストを処理する前の開始フェーズ
リクエスト後の終了フェーズ
開始フェーズには 2 つのプロセスがあります:
最初のプロセスはモジュールの初期化です。フェーズ (MINIT) 、このプロセスは、SAPI ライフ サイクル全体 (Apache の開始後のライフ サイクル全体、またはコマンド ライン プログラムの実行プロセス全体など) で 1 回だけ実行されます。
2 番目のプロセスはモジュール アクティベーション フェーズ (RINIT) で、リクエスト フェーズで発生します。たとえば、URL を通じてページがリクエストされた場合、各リクエストの前にモジュールのアクティベーション (RINIT リクエストの開始) が実行されます。 たとえば、PHP がいくつかの拡張モジュールを登録すると、MINIT ステージ中にすべてのモジュールの MINIT 関数がコールバックされます。 モジュールはこの段階で、定数の登録、モジュールで使用されるクラスの定義などの初期化作業を実行できます。
モジュールは、実装時に次のマクロを通じてこれらのコールバック関数を実装できます:
PHP_MINIT_FUNCTION(myphpextension) { // 注册常量或者类等初始化操作 return SUCCESS; }
リクエストが到着すると、PHPは変数名を保存するシンボルテーブルを含む実行環境の作成など、スクリプトを実行するための基本環境を初期化します。 PHP 実行中の値の内容、および現在のすべての関数、クラス、その他の情報のシンボル テーブル。次に、PHP はすべてのモジュールの RINIT 関数を呼び出します。この段階で、モジュールの RINIT 関数は、MINIT コールバック関数と似ています:
PHP_RINIT_FUNCTION(myphpextension) { // 例如记录请求开始时间 // 随后在请求结束的时候记录结束时间。这样我们就能够记录下处理请求所花费的时间了 return SUCCESS; }
リクエストが処理された後、通常、スクリプトは最後まで実行されるか、exit() 関数または die() 関数を呼び出すことによって、PHP は終了フェーズに入ります。開始フェーズに対応して、終了フェーズも 2 つのステージに分かれています。1 つはリクエストの完了後にモジュールを非アクティブ化するもの (RSHUTDOWN、RINIT に対応)、もう 1 つは SAPI ライフサイクルの終了時にモジュールを閉じるものです ( Web サーバーが終了するか、コマンド ライン スクリプトが実行されて終了します) (MSHUTDOWN、MINIT に対応)。
りー