PHP 動作モードの詳細な概要

藏色散人
藏色散人転載
2021-12-16 15:36:134809ブラウズ

PHP 実行モード

SAPI

ここで説明する PHP 実行モードは、実際には SAPI (サーバー アプリケーション プログラミング インターフェイス、サーバー アプリケーション プログラミング ポート) を指します。 SAPI は、PHP が外部と通信するためのインターフェイスを提供しており、PHP はこのインターフェイスを使用して他のアプリケーションと対話します。さまざまなアプリケーション シナリオに合わせて、PHP はさまざまな SAPI も提供しています。一般的な SAPI には、apache、apache2filter、apache2handler、cli、cgi、embed、fast-cgi、isapi などがあります。

PHP 動作モードの詳細な概要

php_sapi_name() — Web サーバーと PHP の間のインターフェイスのタイプを返します。考えられる戻り値には、aolserver、apache、apache2filter、apache2handler、caudium、cgi (PHP 5.3 まで)、cgi-fcgi、cli、cli-server、continuity、embed、fpm-fcgi、isapi、litespeed、milter、nsapi、phttpd が含まれます。 、pi3web、roxen、thttpd、tux、webjames。

PHP に組み込まれている SAPI 実装の多くは、もはや保守されていないか、主流ではなくなっています。PHP コミュニティは現在、一部の SAPI をコード ベースから移動することを検討しています。コミュニティでは、本当に必要な場合、または一部の機能がほぼ普遍的な場合を除き、多くの機能が PECL ライブラリに含まれていると考えています。

次に、より一般的な 5 つの動作モードについて説明します。

CLI モード

CLI (コマンド ライン インターフェイス)、コマンド ライン インターフェイス、PHP がデフォルトでインストールされます。このインターフェイスを通じて、シェル環境で PHP と対話できます。ターミナルに php -v と入力すると、次の図のような結果が表示されます (PHP がインストールされていると仮定します):

PHP 動作モードの詳細な概要

CLI の存在により、WEB サーバーに依存せずに、シェルや Python を使用するのと同じように、ターミナルのコマンド ラインで PHP スクリプトを直接実行できます。たとえば、Laravel フレームワークの Artisan コマンド ライン ツールは、実際には、Laravel アプリケーションを迅速に構築するために使用される PHP スクリプトです。

CGI モード

CGI (Common Gateway Interface、Common Gateway Interface) は、クライアントが Web ブラウザからネットワーク サーバー上で実行されているプログラムにアクセスしてデータを要求できるようにする重要なインターネット テクノロジです。 CGI は、サーバーとリクエスト ハンドラーの間でデータを転送するための標準を記述しています。

WEBサーバーは単なるコンテンツの配信者です。たとえば、Nginx の場合、クライアントが /index.html をリクエストした場合、Nginx はファイル システム内でこのファイルを見つけてブラウザに送信します。ここで配布されるのは静的データです。クライアントがリクエストした場合/index.php によると、設定ファイルによれば、Nginx はこれが静的ファイルではなく、PHP パーサーによって処理される必要があることを認識しているため、単純な処理の後にリクエストを PHP パーサーに渡します。 Nginx はどのようなデータを PHP パーサーに渡しますか? URL が存在する必要があり、クエリ文字列が存在する必要があり、POST データが存在する必要があり、HTTP リクエスト ヘッダーが欠落していてはなりません。CGI は、どのようなデータをどのような形式で送信するかを規定するプロトコルです。リクエストを処理するためにバックエンドに渡されます。

CGI モードの動作原理: Nginx がブラウザ /index.php からリクエストを受信すると、まず CGI プロトコルに対応するプロセスを作成します。ここでは php-cgi (PHP パーサー) )。次に、php-cgi は php.ini ファイルを解析し、実行環境を初期化し、リクエストを処理し、処理結果を CGI で指定された形式で返し、プロセスを終了します。最後に、Nginx は結果をブラウザーに返します。プロセス全体は Fork-And-Execute パターンです。ユーザーリクエストの数が非常に多い場合、メモリやCPU時間などのシステムリソースが大量に占有され、パフォーマンスが低下します。したがって、CGI を使用するサーバーでは、接続要求の数と同じ数の CGI サブプロセスが存在することになり、サブプロセスの繰り返しロードが CGI のパフォーマンスを低下させる主な原因となります。

PHP 動作モードの詳細な概要

#CGI モードの利点は、どのサーバーからも完全に独立しており、仲介としてのみ機能することです。Web サーバーとスクリプト言語へのインターフェイスを提供するか、完全に独立しています。プログラミング言語。これらは CGI プロトコルを通じて接続され、データ転送を完了します。この利点は、それらの間の相関関係を最小限に抑え、それぞれをより独立させ、互いに独立させることです。

CGI モードはすでに比較的古いモードであり、近年ではほとんど使用されていません。

FastCGI モード

FastCGI (Fast Common Gateway Interface、Fast Common Gateway Interface) は、対話型プログラムが Web サーバーと通信できるようにするプロトコルです。 FastCGI は、以前の Common Gateway Interface (CGI) の拡張バージョンです。 FastCGI は、サーバーが同時により多くの Web ページ要求を処理できるように、Web サーバーと CGI プログラム間の対話オーバーヘッドを削減することに取り組んでいます。

定義によれば、FastCGI もプロトコルです。FastCGI プロトコルを実装するプログラムは、常駐 (長寿命) CGI プロトコル プログラムに似ています。アクティブ化されている限り、いつでも実行できます。 . 毎回フォークするのに時間はかかりません。

FastCGI モードの動作原理: FastCGI プロセス マネージャーが開始されると、最初に php.ini ファイルが解析され、実行環境が初期化され、次に複数の CGI プロトコル インタープリター デーモンが開始されます (複数の CGI プロトコル インタープリター デーモンを起動することもできます)。プロセス管理 php-cig または php-cgi.exe で見られる) を実行し、WEB サーバーからの接続を待ちます。クライアント要求が WEB サーバーに到達すると、FastCGI プロセス マネージャーは CGI インタープリターを選択して接続し、WEB サーバーに接続します。サーバーは CGI 環境変数と標準入力を FastCGI のサブプロセス php-cgi に送信し、php-cgi サブプロセスが処理を完了した後、標準出力とエラー情報を WEB サーバーに返します。を実行すると、php-cgi サブプロセスが接続を閉じ、リクエストが処理されます。その後、引き続き待機して、FastCGI プロセス マネージャーからの次のリクエスト接続を処理します。

PHP 動作モードの詳細な概要

FastCGI モードは C/S 構造を採用しており、WEB サーバーとスクリプト解析サーバーを分離し、スクリプト解析サーバー上で 1 つ以上のスクリプト解析デーモンを起動できます。同じ時間です。 WEB サーバーが動的プログラムに遭遇するたびに、それを FastCGI プロセスに直接配信して実行し、その結果をブラウザーに返すことができます。この方法により、WEB サーバーは静的リクエストを排他的に処理したり、動的スクリプト サーバーの結果をクライアントに返すことができるため、アプリケーション システム全体のパフォーマンスが大幅に向上します。

さらに、CGI モードでは、php-cgi が php.ini 設定を変更した後、新しい php-ini 設定を有効にするために php-cgi プロセスを再起動する必要があり、スムーズな再起動は不可能です。 。 FastCGI モードでは、PHP-FPM は新しい子プロセスを生成することで、php.ini の変更後にスムーズな再起動を実現できます。

PHP-FPM (PHP-FastCGI Process Manager) は、PHP 言語で FastCGI プロトコルを実装するプロセス マネージャーです。Andrei Nigmatulin によって作成および実装されました。PHP に正式に組み込まれ、カーネル。

FastCGI モードの利点:

  • 安定性の観点から、FastCGI モードは独立したプロセス プールを使用して CGI プロトコル プログラムを実行します。システム 簡単に破棄して、新しいプロセスに再割り当てしてロジックを実行できます。

  • セキュリティの観点から、FastCGI モードは分散コンピューティングをサポートしています。 FastCGI プログラムはホストサーバーから完全に独立しており、FastCGI プログラムがハングアップしてもサーバーには影響せず、IO 処理はホストサーバーに任せられるため、ホストサーバーは集中的に IO を処理できます。動的 Web ページでは、論理処理の一部のみが存在し、多数の静止画像などが存在する可能性があります。

  • FastCGI モードは現在 PHP の主流の WEB サービス動作モードであり、効率的で信頼性の高いパフォーマンスを備えており、誰でも使用することをお勧めします。

モジュール モードPHP は、多くの場合、Apache サーバーと組み合わせて、LAMP をサポートするオペレーティング環境を形成します。 PHP をサブモジュールとして Apache に統合するのがモジュール モードです。Apache の一般的な構成は次のとおりです:

LoadModule php5_module modules/mod_php5.so

これは

LoadModule

コマンドを使用します。コマンドの最初のパラメータはモジュールです。名前はモジュール実装のソース コードで確認できます。 2 番目のオプションは、モジュールが配置されているパスです。サーバーの実行中にモジュールをロードする必要がある場合は、シグナル

HUP

または AP_SIG_GRACEFUL をサーバーに送信できます。シグナルが受信されると、Apache は再起動せずにモジュールをリロードします。サーバー。 apache2 の ap_hook_post_config フックに登録すると、Apache が PHP ファイルのリクエストの受け入れを開始するときにこのモジュールが開始されます。 たとえば、クライアントが PHP ファイルにアクセスすると、Apache は php5_module を呼び出して PHP スクリプトを解析します。 Apache はリクエストを受信するたびに、PHP に接続してリクエストを完了するプロセスを作成します。モジュール モードでは、PHP がモジュールとして Apache にコンパイルされる場合があるため、問題が PHP と Apache のどちらで発生しているかを判断することが困難になります。

かつては、豊富なモジュールと機能を備えた Apache を企業が WEB サーバーとして使用することが多く、モジュール モードで実行される PHP と Apache の組み合わせが非常に一般的でした。近年、非同期イベント駆動型の高性能 Nginx サーバーの台頭により、市場シェアが急速に拡大しており、FastCGI モードで動作する PHP Nginx の組み合わせのパフォーマンスが向上し、Apache に追いつく傾向にあります。

ISAPI モード

ISAPI (Internet Server Application Program Interface) は、Microsoft が提供するインターネット サービス用の API インターフェイスのセットです。ISAPI DLL は、ユーザーの要求によってアクティブ化された後、メモリ内に常駐できます。 、ユーザーからの次のリクエストを待つ、複数のユーザーリクエスト処理関数を1つのDLLに設定できることに加え、ISAPI DLLアプリケーションとWEBサーバーが同一プロセス内にあるため、CGIに比べて大幅に効率が高くなります。 Microsoft の独占権により、Windows 環境でのみ実行できます。

はめったに使用されないため、ここでは詳しく紹介しません。

推奨学習: 「PHP ビデオ チュートリアル

以上がPHP 動作モードの詳細な概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はsegmentfault.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。