ホームページ  >  記事  >  バックエンド開発  >  PHP カーネルを深く理解する (2) 概要 - PHP ライフサイクルと Zend エンジン、-phpzend_PHP チュートリアル

PHP カーネルを深く理解する (2) 概要 - PHP ライフサイクルと Zend エンジン、-phpzend_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-12 09:00:041141ブラウズ

PHP カーネルの深い理解 (2) 概要 - PHP ライフサイクルと Zend エンジン、-phpzend

この記事は、「PHP カーネルの深い理解」 (アドレス: https://github) を参照しています。 com/reeze/ティピ

1.SAPIインターフェース

SAPI (サーバー アプリケーション プログラミング インターフェイス) は、特定の PHP アプリケーションのプログラミング インターフェイスを指します。 PHP スクリプトは、Web サーバー、コマンド ライン、または他のプログラムへの埋め込みなど、さまざまな方法で実行できます。

Web サーバーとコマンド ライン プログラムを介したスクリプトの実行は大きく異なって見えますが、実際のプロセスは同じです。 Web サーバー メソッドが PHP スクリプトの実行結果を Web サーバーに返し、コマンド ラインが結果をコンソールに出力するだけです。

スクリプトの実行は SAPI インターフェースの実装から始まりますが、さまざまな SAPI インターフェースの実装がそれぞれの特定の作業を完了します。たとえば、Apache の mod_php SAPI 実装は、Apache から取得した一部の情報を初期化し、その内容を Apache に返す必要があります。他の SAPI 実装も同様です

2. 始まりと終わり

(1) PHP は実行を開始した後、リクエストを処理する前の開始ステージとリクエスト後の終了ステージの 2 つのステージを経ます。開始フェーズには 2 つのプロセスがあります。最初のプロセスはモジュール初期化フェーズ (MINIT) です。このプロセスは、SAPI ライフ サイクル全体 (Apache の開始後のライフ サイクル全体、または Apache の実行プロセス全体など) で 1 回だけ実行されます。コマンドラインプログラム)。 2 番目のプロセスはモジュール アクティベーション フェーズ (RINIT) で、リクエスト フェーズ で発生します。たとえば、URL を通じてページがリクエストされた場合、各リクエストの前にモジュールのアクティベーション (RINIT リクエストの開始) が実行されます。たとえば、PHP がいくつかの拡張モジュールを登録すると、MINIT ステージのすべてのモジュールの MINIT 関数がコールバックされます。モジュールはこの段階で、定数の登録、モジュールで使用されるクラスの定義など、いくつかの初期化作業を実行します。モジュールが実装されると、これらのコールバック関数は次のマクロを通じて実装できます: リーリー リクエスト到着後の PHP 初期化スクリプトの基本環境。PHP の実行中に変数名と値の内容を保存するシンボル テーブルや、現在のすべての関数、クラス、およびオブジェクトのシンボル テーブルを含む実行環境の作成など。その他の情報。次に、PHP はすべてのモジュールの RINIT 関数を呼び出します。この段階で、各モジュールは、MINIT コールバック関数に似たいくつかの関連操作を実行することもできます。 リーリー

リクエストが処理された後、PHP は通常、スクリプトが最後まで実行されるか、die() 関数または exit() 関数が呼び出されることで終了フェーズに入ります。終了フェーズには 2 つのリンクもあります。1 つはリクエストの完了後にモジュールを非アクティブ化することであり (RSHUTDOWN、RINIT に対応)、もう 1 つは SAPI ライフサイクルが終了したときにモジュールを閉じることです (Web サーバーの終了またはコマンドラインスクリプトが実行されて終了します) (MSHUTDOWN、MINIT に対応)。

リーリー

(2) 単一プロセス SAPI ライフサイクル

CLI/CGI モード PHP はシングルプロセス SAPI モードに属します。このタイプのリクエストは、リクエストを一度処理した後に閉じられます。 SAPI ライフサイクル: 開始-リクエスト開始-リクエストクローズ-終了

(3)マルチプロセスSAPIライフサイクル

通常、PHP は Apache のモジュールにコンパイルされます。Apache は通常、複数の子プロセスをフォークして開始し、終了します。初期フェーズはプロセスがフォークアウトした後にのみ実行され、プロセスのライフサイクル全体を通じて複数のリクエストを処理できる場合があります。シャットダウン フェーズは、Apache がシャットダウンされるか、プロセスが終了した後にのみ実行されます。これらの 2 つのフェーズでは、リクエストごとにリクエストが繰り返されます - リクエスト シャットダウン フェーズ

(4) マルチスレッド モードは、マルチプロセス内のプロセスに似ていますが、プロセスのライフサイクル全体にわたって、リクエストの開始と終了のプロセスが 並行して

繰り返される点が異なります。

3.ゼンドエンジン

Zend エンジンは PHP 実装の中核であり、言語実装のインフラストラクチャを提供します。たとえば、PHP 構文の実装、スクリプトのコンパイルと実行環境、拡張メカニズムとメモリ管理などです。ここでの PHP は、公式の PHP 実装を指します (現在 HHVM に発展している Facebook の Hiphop もあります。これまでのところ (このプロジェクト) PHP には標準の言語仕様がありません)、PHP はリクエスト処理やその他の Web サーバー インターフェイス (SAPI) を提供します。 )

http://www.bkjia.com/PHPjc/1095119.html

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/1095119.html技術記事 PHP カーネルを深く理解する (2) 概要 - PHP ライフサイクルと Zend エンジン、-phpzend この記事は、「PHP カーネルを深く理解する」 (アドレス: https://github.com/reeze/tipi) を参照しています。 1. SAPI インターフェース SAPI (サービス...)
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。