PHPは、ライフサイクルを導入します

PHPが動作モード:

PHPのWEBモードの2つの動作モード、CLIモードがあります。どちらのモードでは、PHPの作品はSAPIと同じで、実行されます。

1は、私たちは、端末にPHPのコマンドをノックするとき、それは、CLIを使用しています。

これは、サポートPHPにWebサーバが要求を完了してようなものだ、その要求は完全な再転送が端末に制御しています。

2、Apacheウェブサーバやホスト、リクエストが来たときに、PHPのサポートが要求を完了しますように使用していないとき。一般的には、以下のとおりです。

  • (通常はPHP要求を処理するためのApacheモジュールとしてコンパイル)マルチプロセス
  • マルチスレッドモード

実装プロセスの概要:

1は、ApacheとPHPを起動して実行することです。

2、PHP、およびApacheモジュールmod_php5.so(具体的にはSAPI、即ち、サーバ・アプリケーション・プログラミング・インターフェース)を介して接続されています。

図3に示すように、三つのモジュールのPHPの全カーネル、Zendのエンジン、及び拡散層と

4、PHPカーネルは、要求、ストリーム・ファイル、エラー処理及び他の関連する操作を処理するために使用されます。

5、機械語にソースファイルを変換して、仮想マシン上で実行するためのZendエンジン(ZE)。

図6に示すように、エンハンスメントレイヤは関数の集合であり、ライブラリが流れ、PHPは、特定の操作を実行するためにそれらを使用します。例えば、我々は、MySQLデータベースのMySQL拡張モジュールに接続する必要があります。

プログラムの実行ZEは、いくつかの拡張を接続する必要があるかもしれないときに7は、ZEは、次に転送は、特定のタスクの復帰後に処理として、拡大するように制御します。

図8は、最終的に、ZEは次にSAPI層、ブラウザへの最終出力に結果を送信するPHPのコアを、実行中のプログラムに結果を返します。

PHPは、いくつかの段階で実行されます。

SAPIは、次の段階を経てPHPを実行しています:

図1に示すように、初期化段階のモジュール(モジュールINIT)。

即ちメソッドPHP_MINIT_FUNCTION初期化モジュールのソースコード内の各内線呼び出し、いくつかの変数は、アプリケーション・モジュール、メモリの割り当てを必要としました。

図2に示すように、初期化段階要求(リクエストINIT):

PHPスクリプトの初期化実行環境では、クライアントの要求PHP_RINIT_FUNCTIONの拡張後に受信された各メソッド呼び出し。

3、PHPスクリプトの実行

図4に示すように、要求(リクエストシャットダウン)の終わり:

今回のサイトをきれいにし、ZE変数とメモリのリサイクルを開始するために、各延長要求PHP_RSHUTDOWN_FUNCTIONの方法を呼び出します。

5、モジュール(モジュールのシャットダウン)を閉じます。

出口のWebサーバーまたはコマンドラインスクリプトの完了出口がソースコードを拡張するPHP_MSHUTDOWN_FUNCTIONの道を呼び出します

それぞれの場合のSAPIのライフサイクル

1.シングルSAPIプロセスのライフサイクル。(CGI)

PHP CLI /シングルプロセスモードに属しCGIモードSAPI。終了後のこのような要求の処理要求。その要求は、これらのリンクたびに繰り返されます: - 開始要求 - 要求閉じた - スタートを終了します。私たちは、拡張された初期化は、リソースの多くを取る見ることができます。

2. SAPIマルチプロセスのライフサイクル。(MPMのperforkの道)

PHPは、典型的には、Apacheの要求PHP(mod_phpを)を処理するモジュールにコンパイルされます。Apacheは、一般的にマルチプロセスモードでは、スタートは、より多くのApacheの子プロセス(あなたがプロセスからスタートフォークの数を指定することができますApacheを)出フォークますされます。プロセスの独立性あたりのメモリ空間は、それぞれの子はちょうど開始と終了のリンク後にフォックます。

3.マルチスレッドSAPIのライフサイクル。(FastCGIのモードやMPMの単一のプロセスワーク)

マルチスレッドと同様のプロセスでマルチプロセスモデルこのモードでは、唯一の1つのサーバー・プロセスが実行していることが、それはこのようにいくつかのリソースのコストを削減し、同時に多くのスレッドを実行し、モジュールにモジュールのシャットダウンを初期化する唯一の必要性ライン上で再び実行し、いくつかのグローバル変数は、可能な個々の要求の数の間でデータの共有を容易スレッド固有の特性ので、一度だけ初期化。

おすすめ

転載: www.cnblogs.com/mengxiangdetiankonghenda/p/12591774.html