ホームページ  >  記事  >  バックエンド開発  >  PHP リクエストの始まりと終わり: MINIT と RINIT、RSHUTDOWN と MSHUTDOWN

PHP リクエストの始まりと終わり: MINIT と RINIT、RSHUTDOWN と MSHUTDOWN

伊谢尔伦
伊谢尔伦オリジナル
2016-11-21 16:36:012451ブラウズ

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 に対応)。

りー


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。