PHP では、cgi は「Common Gateway Interface」の略で、パブリック ゲートウェイ インターフェイスを意味します。cgi を使用すると、クライアントは Web ブラウザからネットワーク サーバー上で実行されるプログラムにデータを要求できます。サーバーとリクエスト ハンドラー間でデータを転送するための標準。
このチュートリアルの動作環境: Windows10 システム、PHP7.1 バージョン、DELL G3 コンピューター
簡単に言えば、CGI と FastCGI は単なるプロトコル、php-cgi は cgi を実装するプログラム、php-fpm は php-cgi を管理するマネージャーにすぎません。
CGI の正式名は「Common Gateway Interface」 (Common Gateway Interface) です。これは、HTTP サーバーがプログラムまたは他のマシンのプログラムと「通信」するためのツールです。プログラムは、ネットワークサーバー。
は、クライアントが Web ブラウザから Web サーバー上で実行されるプログラムにデータを要求できるようにする重要なインターネット テクノロジです。
CGI は、サーバーとリクエスト ハンドラーの間でデータを転送するための標準を記述します。
CGI は何をするのですか? CGI は、Web サーバーによって渡されるデータが標準形式であることを保証するためのもので、これは CGI プログラムの作成者にとって便利です。
Web サーバー (nginx など) は、単なるコンテンツのディストリビューターです。たとえば、/index.html がリクエストされた場合、Web サーバーはファイル システム内でこのファイルを見つけてブラウザに送信しますが、ここで配布されるのは静的データです。構成ファイルによると、リクエストが /index.php に対するものである場合、nginx はこれが静的ファイルではなく、PHP パーサーによって処理される必要があることを認識しているため、単純にリクエストを処理して次のファイルに渡します。 PHP パーサー。 Nginx はどのようなデータを PHP パーサーに渡しますか? URL が存在する必要があります、クエリ文字列が存在する必要があります、POST データが存在する必要があります、そして HTTP ヘッダーが存在する必要があります。CGI は、どのようなデータが送信され、どのような形式で渡されるかを規定するプロトコルです。リクエストを処理するバックエンド。 PHP コードで使用するユーザー データがどこから来たのかを慎重に考えてください。
Web サーバーは /index.php のリクエストを受信すると、対応する CGI プログラム (PHP パーサー) を開始します。次に、PHP パーサーは php.ini ファイルを解析し、実行環境を初期化し、リクエストを処理し、CGI で指定された形式で処理結果を返し、プロセスを終了します。その後、Web サーバーは結果をブラウザーに返します。
わかりました、CGI はプロトコルであり、プロセスなどとは何の関係もありません。では、fastcgi とは何でしょうか? Fastcgi は、CGI プログラムのパフォーマンスを向上させるために使用されます。
FastCGI は CGI を発展させて改良したものです。従来の CGI インターフェイス方式の主な欠点は、パフォーマンスが低いことです。これは、HTTP サーバーが動的プログラムに遭遇するたびに、スクリプト パーサーを再起動して解析を実行する必要があり、結果が HTTP サーバーに返されるためです。
パフォーマンスを向上させるということですが、CGI プログラムのパフォーマンス上の問題は何でしょうか? 「PHP パーサーは php.ini ファイルを解析し、実行環境を初期化します。」それだけです。標準 CGI はリクエストごとにこれらの手順を実行するため (疲れる必要はありません。プロセスを開始するのは非常に面倒です!)、毎回の処理時間は比較的長くなります。これは明らかに不合理です!では、Fastcgi はどのようにしてそれを行うのでしょうか?まず、Fastcgi はマスターを起動し、構成ファイルを解析し、実行環境を初期化してから、複数のワーカーを起動します。リクエストが届くと、マスターはそれをワーカーに渡し、すぐに次のリクエストを受け入れることができます。これにより作業の重複が回避され、当然効率が高くなります。また、十分なワーカーがない場合、マスターは構成に従っていくつかのワーカーを事前に開始して待機することができます。もちろん、アイドル状態のワーカーが多すぎる場合は一部が停止されるため、パフォーマンスが向上し、リソースが節約されます。これがfastcgiのプロセス管理です。
それでは、PHP-FPM とは何でしょうか? Fastcgi を実装したプログラムであり、PHP に正式に受け入れられました。
ご存知のとおり、PHP のインタプリタは php-cgi です。 php-cgi は単なる CGI プログラムです。要求を解析して結果を返すことしかできませんが、プロセスを管理する方法は知りません (陛下、私にはそんなことは本当にできません!)。そのため、php-cgi をスケジュールできるプログラムがいくつかあります。たとえば、spawn-fcgi は lighthttpd から分離されています。さて、PHP-FPM も同様で、長い開発期間を経て、徐々に誰もが認めるようになり、ますます普及してきました。
PHP-CGI は、PHP スクリプトを解釈する単なるプログラムです。
PHP-FPM は FastCGI マネージャーです
CGI モードの動作原理
Nginx がブラウザ/index.php リクエストを受信すると、まず、次の処理が行われます。 CGI プロトコルの実装に対応するものが作成されます。ここでは php-cgi (PHP パーサー) を使用します。次に、php-cgi は php.ini ファイルを解析し、実行環境を初期化し、リクエストを処理し、処理結果を CGI で指定された形式で返し、プロセスを終了します。最後に、Nginx は結果をブラウザーに返します。プロセス全体は Fork-And-Execute モードです。ユーザーリクエストの数が非常に多い場合、メモリやCPU時間などのシステムリソースが大量に占有され、パフォーマンスが低下します。したがって、CGI サーバーでは、接続要求の数と同じ数の CGI サブプロセスが存在することになり、サブプロセスの繰り返しロードが CGI パフォーマンス低下の主な原因となります。
推奨学習: 「PHP ビデオ チュートリアル 」
以上がPHPでのCGIは何を意味しますかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。