ホームページ >バックエンド開発 >PHPチュートリアル >PHP ライフサイクル分析
この記事では主に PHP のライフサイクルについて説明します。PHP のライフサイクルを理解する前に、Apache と PHP の関係を理解する必要があります。興味のある方は参考にしてください。
1.Apacheの動作機構の解析
-------------------------- --- --
全体図は以下の通りです:
Apache のフック メカニズム Apache のフック メカニズムとは、次のことを指します。 Apache では、モジュール (内部モジュールと外部モジュール、mod_php5.so、mod_perl.so など を含む) がカスタム関数を挿入できるようにします。リクエスト処理ループに入る。言い換えれば、モジュールは Apache の任意の処理段階で独自の処理関数をフックすることができ、それによって Apache のリクエスト処理プロセスに参加することができます。
mod_php5.so/ php5apache2.dll は、フック メカニズムを通じて、含まれているカスタム関数を Apache に挿入し、Apache 処理プロセスの各段階で php リクエストを処理する役割を果たします。
Apache がどのように PHP にフックするかがわかったので、Apache が PHP に転送した後のプロセス ロジックを見てみましょう。
2.PHP実行フローダイアグラム
PHPの開始ステージと終了ステージ
PHP は実行開始後に 2 つの主要な段階を経ます: リクエストを処理する前の開始フェーズとリクエスト後の終了フェーズ。 2.1 SAPI が PHP を実行するときに通過するいくつかの段階
Module init
つまり、各拡張機能のソースコードの PHP_MINIT_FUNCTION のメソッドを呼び出して、モジュールの初期化、モジュールに必要ないくつかの変数の適用、メモリの割り当てなどを行います。
Request init
クライアントのリクエストを受信した後、各拡張 PHP_RINIT_FUNCTION のメソッドが呼び出され、PHP スクリプトの実行環境が初期化されます。
PHP スクリプトを実行します (この手順はほとんどの PHP プログラマーにとって馴染みのあるもので、作成したコードはここで実行されます)
リクエストシャットダウン
この時点で、PHP_RSHUTDOWN_FUNCション各拡張機能のメソッドが呼び出されてリクエスト サイトがクリーンアップされ、ZE が変数とメモリのリサイクルを開始します
モジュールを閉じる (モジュール シャットダウン)
Web サーバーが終了するか、コマンド ライン スクリプトが実行された 終了すると、拡張ソース コードの PHP_MSHUTDOWN_FUNCTION メソッドが呼び出されます
: start - request start - request close - end SAPI インターフェイスの実装はライフ サイクルを完了します
2.2 開始フェーズ
2.2.1 モジュール初期化フェーズMINIT
SAPI ライフサイクル全体中 (Apache の開始後など)ライフサイクル全体、またはコマンド ライン プログラムの実行プロセス全体)、 このプロセスは 1 回だけ実行されます。
Apache の起動後、PHP インタープリターも起動し、
PHP は各拡張機能 (モジュール) の MINIT メソッドを呼び出し、それによってこれらの拡張機能を使用可能な状態に切り替えます。
//これは、新しい DLL モジュールが導入されたときに Apache を再起動する必要がある理由でもあります。 php.ini
2.2.2 モジュールのアクティブ化フェーズ RINIT
该过程发生在请求阶段, 例如通过url请求某个页面,则在每次请求之前都会进行模块激活(RINIT请求开始)。
请求到达之后,SAPI层将控制权交给PHP层,PHP初始化本次请求执行脚本所需的环境变量
例如是Session模块的RINIT,如果在php.ini中启用了Session 模块,那在调用该模块的RINIT时就会初始化$_SESSION变量,并将相关内容读入; 然后PHP会调用所有模块RINIT函数,即“请求初始化”。
在这个阶段各个模块也可以执行一些相关的操作, 模块的RINIT函数和MINIT函数类似 ,RINIT方法可以看作是一个准备过程,在程序执行之前就会自动启动。
PHP_RINIT_FUNCTION(extension_name) { /* Initialize session variables, pre-populate variables, redefine global variables etc */ }
2.3结束阶段
请求处理完后就进入了结束阶段, 一般脚本执行到末尾或者通过调用exit()或者die()函数,PHP都将进入结束阶段. 和开始阶段对应,结束阶段也分为两个环节,一个在请求结束后(RSHUWDOWN),一个在SAPI生命周期结束时(MSHUTDOWN).、
2.3.1请求结束后(RSHUWDOWN)
请求处理完后就进入了结束阶段,PHP就会启动清理程序。
它会按顺序调用各个模块的RSHUTDOWN方法。
RSHUTDOWN用以清除程序运行时产生的符号表,也就是对每个变量调用unset函数。
PHP_RSHUTDOWN_FUNCTION(extension_name) { /* Do memory management, unset all variables used in the last PHP call etc */ }
2.3.2 SAPI生命周期结束时(MSHUTDOWN)
最后,所有的请求都已处理完毕
SAPI也准备关闭了
PHP调用每个扩展的MSHUTDOWN方法
这时各个模块最后一次释放内存的机会。
(这个是对于CGI和CLI等SAPI,没有“下一个请求”,所以SAPI立刻开始关闭。)
PHP_MSHUTDOWN_FUNCTION(extension_name) { /* Free handlers and persistent memory etc */ }
PHP のライフサイクル全体が終了しました。なお、「第1ステップの開始」と「第2ステップの終了」はサーバからのリクエストがない場合のみ実行されます。
関連する推奨事項:
thinkPHP5.0フレームワークアプリケーションリクエストライフサイクル分析
React Native の概要コンポーネント 期間はどれくらいですか
以上がPHP ライフサイクル分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。