ホームページ  >  記事  >  バックエンド開発  >  php CLI、CGI、FastCGI、mod_php、fastcgimod_php_PHP チュートリアルのいくつかの動作モード

php CLI、CGI、FastCGI、mod_php、fastcgimod_php_PHP チュートリアルのいくつかの動作モード

WBOY
WBOYオリジナル
2016-07-12 08:57:201006ブラウズ

php CLI、CGI、FastCGI、mod_php、fastcgimod_phpのいくつかの動作モード

1. CLI: たとえば、コンソールまたはシェルで次のコマンドを入力できます。 リーリー

次に出力を取得します

2. CGI: 以下は異なる説明と理解です

「共通ゲートウェイ インターフェイス」 (共通ゲートウェイ インターフェイス) は、HTTP サーバーが自分または他のマシンのプログラムと「通信」するためのツールであり、そのプログラムはサーバー環境でネットワーク サーバー上で実行する必要があります。標準の「プログラム」を提供します。 「プログラム」がサーバーとクライアント間で交換される情報を使用して何かを実行できるインターフェース。「プログラム」の言語は、サーバーが CGI などの環境変数をサポートする必要はありません。

HTTP サーバーと独立したプロセス間のプロトコルは、HTTP リクエストのヘッダーをプロセスの環境変数に設定し、HTTP リクエストの本文をプロセスの標準入力に設定し、プロセスの標準出力は HTTP レスポンスですヘッダーとボディを含みます。

この Web サーバーは、

UNIX シェル環境変数

を使用して Web サーバーから渡されたパラメーターを保存し、CGI を実行する独立したプロセスを生成します。 さまざまな種類の言語で書かれたプログラムが CGI 標準に準拠している限り、CGI プログラムとして Web サーバーと対話できます

CGI モードで実行している場合、Web サーバーはユーザーのリクエストをメッセージの形式で PHP の独立したプロセスに転送します。PHP と Web サービスの間には何の関係もありません。

個人的な理解: CGI は php と Web サーバー間の通信のルールを規定しています。これは、response = exec("php -findex.php -url=xxx -cookie=xxx -xxx=xxx") を実行するのと同じです。

CGI と CLI の違いについては、非常に優れた公式ドキュメントを確認できます: http://php.net/manual/zh/features.commandline.php

この記事では、CGI と CLI の重要な違いについて説明しています:

以下は、

CLI SAPI

と他の CLI SAPI モジュールの大きな違いです:

    CGI SAPI
  • とは異なり、その出力にはヘッダー情報がありません。

    CGI SAPIにはHTTPヘッダー情報をキャンセルするメソッドが用意されていますが、

    CLI SAPI

    にはHTTPヘッダー情報の出力を有効にする同様のメソッドがありません。 CLI はデフォルトで Quiet モードで起動しますが、互換性を確保するために、-q パラメータと --no-header パラメータは下位互換性のために保持されており、古い CGI スクリプトの使用が可能です。

    実行中、作業ディレクトリはスクリプトの現在のディレクトリに変更されません (CGI モードと互換性を持たせるために -C および --no-chdir パラメータを使用できます)。

    エラー発生時に平文エラーメッセージ(HTML形式ではない)を出力します。

  • 3. FastCGI: CGI には多くの欠点があります。リクエストを受信するたびにプロセスをフォークして処理する必要があり、1 つのリクエストを受信して​​ 1 つの応答しか行うことができません。リクエストが終了するとプロセスは終了します。 FastCGI は事前に起動され、CGI 管理サーバーとして存在し、事前に一連のサブプロセスを起動して処理を待ち、Web サーバーから送信されるリクエストを待ちます。この方法では、サブプロセスに処理を渡す必要がないため、リクエストを受信した後に CGI を起動する方がはるかに高速になります。 FastCGI は、プロセス/スレッド プールを使用して一連のリクエストを処理します。これらのプロセス/スレッドは、Web サーバーではなく、FastCGI サーバーによって管理されます。 リクエストが届くと、Web サーバーは環境変数とページリクエストを Socket Long 接続を通じて FastCGI プロセスに渡します。 FastCGI は常駐 CGI のようなもので、常に実行でき、リクエストが到着したときにプロセスをフォークするのに時間がかかりません (これは CGI 批評家が批判するフォークアンド実行モードです)。単なる通信プロトコルであるからこそ、分散コンピューティングもサポートしています。つまり、FastCGI プログラムを Web サイトサーバー以外のホストで実行し、他の Web サイトサーバーからのリクエストを受け入れることができます

FastCGI の

プロセス全体:

Webサーバーの起動時にFastCGIプロセスマネージャーをロードします

    1. FastCGI は自身を初期化し、複数の CGI インタープリター プロセス (複数の php-cgi が表示されます) を開始し、Web サーバーからのリクエストを待ちます

    2. Web サーバーをリクエストする場合、Web サーバーはソケットを通じて FastCGI プロセス マネージャーをリクエストし、CGI インタープリターを選択して接続します。Web サーバーは CGI 環境変数と標準入力を FastCGI サブプロセス php- に送信します。 CG
    3. FastCGI サブプロセスはリクエストを処理した後、同じ接続から Web サーバーに標準出力とエラーを返します。FastCGI サブプロセスが終了すると、リクエストも終了します。次に、FastCGI 子プロセスは、FastCGI プロセス マネージャーからの次の接続を処理するのを待ち、その時点で php-cgi は CGI モードで終了します。

php-fpm: PHP 用 FastCGI プロセスマネージャー

4. mod_php: Web サーバーのサブプロセスとして PHP を制御する Apache の php モジュール。最も明らかな例は、PHP の設定ファイルの場合です。 .INI が変更されると、Web サービスを再起動しなくても有効になりますが、モジュール モードでは Web サービスを再起動する必要があります。 PHP を mod_php モードで実行すると、php は Apache のモジュールとして起動されます。したがって、Apache の起動時にのみ php.ini 設定ファイルが読み込まれます。拡張モジュールをロード中

Apache 動作モード プリフォーク動作原理

別の制御プロセス (親プロセス) は、リクエストをリッスンして応答するために使用される子プロセスの生成を担当します。 Apache は、今後のリクエストに備えて、常にいくつかの予備またはアイドル状態の子プロセスを保持しようとします。このように、クライアントはサービスを取得する前に子プロセスが生成されるのを待つ必要がありません。 Unix システムでは、親プロセスは通常、ポート 80 をバインドする root として実行されますが、Apache によって生成された子プロセスは通常、低い特権のユーザーとして実行されます。 User ディレクティブと Group ディレクティブは、子プロセスに対して権限の低いユーザーを構成するために使用されます。子プロセスを実行するユーザーは、提供しているコンテンツに対する読み取り権限を持っている必要がありますが、サービス コンテンツ以外の他のリソースに対する権限はできるだけ少なくする必要があります。

ワーカーの仕組み

各プロセスが持つことができるスレッドの数は固定されています。サーバーは負荷に基づいてプロセスの数を増減します。別の制御プロセス (親プロセス) が子プロセスの確立を担当します。各子プロセスは、ThreadsPerChild の数のサービス スレッドとリスニング スレッドを確立できます。リスニング スレッドは、アクセス要求をリッスンし、処理と応答のためにサービス スレッドに渡します。 Apache は常に、サービス スレッドのスペアまたはアイドル プールを維持しようとします。このようにして、クライアントは、新しいスレッドまたはプロセスが処理される前に、確立されるのを待つ必要がありません。 Unix では、ポート 80 をバインドできるようにするために、通常、親プロセスは root として起動され、その後、Apache はより低い権限を持つユーザーとして子プロセスとスレッドを作成します。 User ディレクティブと Group ディレクティブは、Apache 子プロセスの権限を構成するために使用されます。子プロセスには、それが提供するコンテンツへの読み取りアクセスが必要ですが、できる限り少ない権限を与える必要があります。さらに、suexec が使用されない限り、これらの命令によって設定された権限は CGI スクリプトによって継承されます

個人的な理解: このモードは php を Apache に埋め込みます。これは、php ファイルを解析する機能を Apache に追加するのと同じです。

www.bkjia.com本当http://www.bkjia.com/PHPjc/1109844.html技術記事 php CLI、CGI、FastCGI、mod_php、fastcgimod_php のいくつかの動作モード 1. CLI: これは、たとえば、コンソールまたはシェルにコマンド php-findex.php を入力し、入力を取得できます。 .
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。