PHPカーネル探索:一次要求ライフサイクル


深く検討する.
本当の内部実行プロセスはそんなに簡単ではありません.以上の過程は簡略版にすぎないので、背後に何が起こっているのか、もう一度深く掘り下げてみましょう.
Apacheが起動すると、PHP解釈プログラムも起動します.PHPの起動プロセスには2つのステップがあります.
  • の最初のステップは、SAPIライフサイクル全体で機能する環境変数を初期化することです.
  • の第2のステップは、現在の要求に対してのみいくつかの変数設定を生成することである.

  • PHP起動第一歩
    何の第一歩が何なのか分からない.心配しないでください.これから詳しく議論します.まず第一歩を見てみましょう.最も主要な一歩です.最初のステップの操作は、任意のリクエストが到着する前に発生したことを覚えておいてください.
    Apacheを起動すると、PHP解釈プログラムも起動します.PHPは、各拡張MINITメソッドを呼び出し、これらの拡張を利用可能な状態に切り替える.見てみろiniファイルにどの拡張子が開いているのでしょうか.MINITの意味は「モジュール初期化」です.各モジュールは、他のリクエストを処理するために関数、クラスライブラリなどのセットを定義します.
    典型的なMINIT法は以下の通りである.
    PHP_MINIT_FUNCTION(extension_name){ /* Initialize functions, classes etc */ }

    PHP起動ステップ2
    ページ要求が発生すると、SAPIレイヤはPHPレイヤに制御権を渡す.そこでPHPは,今回のリクエストに返信するために必要な環境変数を設定した.同時に、実行中に生成された変数名と値を格納する変数テーブルも作成されます.PHPは各モジュールのRINITメソッドである「イニシャル要求」を呼び出す.古典的な例は、php.IniでSessionモジュールを有効にすると、そのモジュールのRINITを呼び出すと$_が初期化されます.SESSION変数は、関連コンテンツを読み込みます.RINITメソッドは,プログラム実行間で自動的に起動する準備プロセスと見なすことができる.典型的なRINIT法は以下の通りである.
    PHP_RINIT_FUNCTION(extension_name) { /* Initialize session variables,pre-populate variables, redefine global variables etc */ }

    PHPオフ第一歩
    PHPが起動したように、PHPのオフも2段階に分かれています.ページの実行が完了すると(ファイルの最後に実行されてもexitまたはdie関数で中止されても)、PHPはクリーンアッププログラムを開始します.各モジュールのRSHUTDOWNメソッドが順番に呼び出されます.RSHUTDOWNは、プログラムの実行時に生成されたシンボルテーブル、すなわち各変数に対してunset関数を呼び出すために使用されます.
    典型的なRSHUTDOWN方法は以下の通りである.
    PHP_RSHUTDOWN_FUNCTION(extension_name) { /* Do memory management, unset all variables used in the last PHP call etc */ }

    PHPオフステップ2
    最後に、すべての要求が処理され、SAPIも閉じる準備ができており、PHPは2番目のステップを実行し始めました.PHPは各拡張MSHUTDOWNメソッドを呼び出し、これは各モジュールが最後にメモリを解放する機会です.
    典型的なRSHUTDOWN方法は以下の通りである.
    PHP_MSHUTDOWN_FUNCTION(extension_name) { /* Free handlers and persistent memory etc */ }

    これでPHPライフサイクル全体が終了します.サーバが要求していない場合にのみ、「最初のステップを開始」および「2番目のステップを閉じる」が実行されることに注意してください.