php における cgi と fcgi の違い: cgi は「common Gateway Interface」の略称であり、共通ゲートウェイ インターフェースを指します。一方、fcgi は「fast Common Gateway Interface」の略語で、これは共通ゲートウェイ インターフェースを指します。高速共通ゲートウェイ インターフェイス。 「php-cgi」は CGI プロトコルの実装であり、「PHP-FPM」は FCGI プロトコルの実装です。
この記事の動作環境: Windows 10 システム、PHP バージョン 8.1、Dell G3 コンピューター
CGI:共通ゲートウェイインターフェース 共通ゲートウェイインターフェースFCGI:高速共通ゲートウェイインターフェース 高速共通ゲートウェイインターフェースphp-cgi は CGI プロトコル、PHP の実装です。 FPM は FCGI プロトコルの実装です。 CGI は、nginx などの Web サーバーと PHP などのバックエンド動的スクリプト言語間の通信のためのプロトコル インターフェイスです。
知識を広げる
1. シナリオ:
ブラウザが Web をリクエストします。たとえば、nginx が静的なindex.html をリクエストした場合、nginx はそれを直接返すことができます。ただし、リクエストが idex.php の場合、nginx は設定に従ってそれが静的リソースではないことを認識し、バックエンド サービスをリクエストする必要があります。では、nginx がバックエンド サービスをリクエストするとき、どのような形式で、どのようなデータをバックエンド サービスに送信する必要があるのでしょうか? CGI は、フォーマットとデータを定義するプロトコルです。2. CGI プロトコルの欠点:
CGI プロトコルは、バックエンド サービスを要求するたびに、CGI プロトコルを実装するプログラムを起動する必要があります。 PHP パーサー。 PHP パーサーは PHP.ini ファイルを解析し、初期化作業を実行し、リクエストを処理し、結果を返します。各リクエストを再初期化する必要がありますが、これは冗長な作業です。そこでFCGIが誕生しました。 PHP はインタープリター型言語であるため、PHP コードを解釈するにはインタープリターが必要です。3. FCGI の利点:
FCGI プロトコルは最初にマスターを開始し、これを使用して PHP.ini ファイルを解析し、初期化作業を実行します。複数のワーカーを起動すると、ワーカーは特定のリクエストの処理に使用されます。これにより、初期化と特定のリクエストの処理が分離されます。これにもマスターとワーカーを管理するプログラムが必要となるため、PHP-FPMが登場しました。 FCGI は C/S アーキテクチャを採用しています。 Web サーバーをスクリプト解析サーバーから分離します。 Web サーバーが静的リソースのみを処理し、バックエンド スクリプト解析サーバーから返されたデータをブラウザーに返すようにします。 Web サーバー nginx は、PHP プログラムなどの外部プログラムの直接呼び出しや解析をサポートしていないため、CGI インターフェイスを通じて呼び出す必要があります。これには実際には、CGI をカプセル化してラッパー (実際には PHP-FPM) を形成する必要があります。 nginx は PHP-FPM を呼び出し、PHP-FPM はバックエンド PHP コードを呼び出し、PHP-FPM は結果を nginx に返します。 これで、PHP-FPM が PHP カーネルに統合されました。 PHP-FPM と nginx は、静的リソースの処理と動的リクエストの転送に対するフロントエンド nginx への負担を軽減するために、異なるサーバーにデプロイされることがよくあります。 FCGI は CGI よりも安全です。4. CGI プロトコル PHP-CGI の実装
php.ini ファイルを変更すると、PHP-CGI がスムーズに移行できなくなります。つまり、これらの新しい構成を使用するには、PHP-CGI プログラムを再起動する必要があります。5. FCGI プロトコル PHP-FPM の実装
php.ini ファイルを変更すると、PHP-FPM はスムーズに移行できます。変更前のワーカーはリクエストの処理後に破棄され、新たに生成されたワーカーは新しい構成を使用できるようになります。これによりスムーズな移行も実現します。 さらに、PHP-CGI プロセスがハングすると、PHP は実行できなくなります。 PHP-FPM にはこの問題はなく、デーモンは子プロセスをスムーズに再起動します。 PHP-FPM が登場する前に、実は lighthttpd から開発された spawn-fcgi がありました。 PHP-FPM は初期化中に複数のワーカーを作成でき、ワーカーがアイドル状態になったときにワーカーをリサイクルできます。 spawn-fcgi はメモリ リークを引き起こしたり、同時実行性が高い場合に FCGI を自動的に再起動したりする可能性があります。推奨学習: 「PHP ビデオ チュートリアル
」###以上がPHPのcgiとfcgiの違いは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。