PHP の ISAPI と FastCGI の比較
http://www.cnblogs.com/huangye-dream/p/3560722.html
1. CGI (Common Gateway Interface) は通常、EXE などの実行可能なプログラムです。ファイルと WEB サーバーはそれぞれ異なるプロセスを占有し、一般に CGI プログラムは 1 つのユーザー リクエストしか処理できません。このように、ユーザー リクエストの数が非常に多い場合、メモリや CPU 時間などのシステム リソースが大量に占有され、パフォーマンスが低下します。
2. ISAPI (Internet Server Application Program Interface) は、Microsoft が提供する WEB サービス用の API インターフェースのセットで、CGI が提供するすべての機能を実現し、これに基づいてフィルター インターフェースを提供します。ほとんどの ISAPI アプリケーションは DLL 動的ライブラリの形式で使用され、ユーザーからの要求後に実行できます。これらはユーザー要求の処理後すぐには消えませんが、引き続きメモリ内に常駐し、他のユーザー入力を待ちます。処理される。また、ISAPI の DLL アプリケーションと WEB サーバーは同一プロセス内にあるため、CGI に比べて効率が大幅に高くなります。
3. FastCGI は、スケーラブルなアーキテクチャを備えた CGI のオープンな拡張機能であり、その主な動作は CGI インタープリター プロセスをメモリ内に保持し、より高いパフォーマンスを実現することです。従来の CGI インタープリターの繰り返しロードが CGI パフォーマンス低下の主な原因です。CGI インタープリターがメモリ内に残り、FastCGI プロセス マネージャーのスケジューリングを受け入れる場合、良好なパフォーマンス、スケーラビリティなどが提供されます。
PHP を ISAPI モードで実行する この方法の最大の欠点は、PHP に問題が発生すると、Apache プロセスも停止してしまうことです。
PHP を FastCGI モードで実行する利点:
まず第一に、PHP が失敗した場合、Apache はダウンしませんが、PHP 自体のプロセスはクラッシュします (ただし、FastCGI は、クラッシュしたプロセスを置き換えるために新しい PHP プロセスをすぐに再起動します)。
第二に、PHP を FastCGI モードで実行するパフォーマンスは、ISAPI モードのパフォーマンスよりも優れています
最後に、PHP5 と PHP4 を同時に実行することが可能です
FastCGI モードのいくつかの欠点:
FastCGI モードを使用することは、運用環境のサーバーには適していますが、開発マシンには適しています。これを言うのは適切ではありません。 Zend Studio を使用してプログラムをデバッグすると、FastCGI は PHP プロセスがタイムアウトしたと判断し、ページ上で 500 エラーを返すためです。
バージョン 4.3.0 以降、PHP は、CLI (Command Line Interface、つまりコマンド ライン インターフェイス) と呼ばれる、新しいタイプの SAPI (サーバー アプリケーション プログラミング インターフェイス、サーバー アプリケーション プログラミング ポート) サポートを提供します。名前が示すように、この SAPI モジュールは主に PHP の開発シェル アプリケーションとして使用されます。 CLI SAPI には、他の SAPI モジュールとは多くの違いがあります。 CLI と CGI は多くの共通の動作を共有しますが、異なる SAPI であることに言及する価値があります。
CLI SAPI は PHP 4.2.0 で最初にリリースされましたが、まだ実験版にすぎず、./configure の実行時に –enable-cli パラメーターが必要です。 PHP 4.3.0 バージョン以降、CLI SAPI は正式なモジュールになりました。 –enable-cli パラメータはデフォルトでオンに設定され、パラメータ –disable-cli で無効にすることもできます。
PHP 4.3.0 以降、CLI/CGI バイナリ実行可能ファイルのファイル名、場所、存在は、PHP がシステムにどのようにインストールされているかによって異なります。デフォルトでは、make を実行すると、CGI と CLI の両方がコンパイルされ、PHP ソース ファイル ディレクトリのそれぞれ sapi/cgi/php と sapi/cli/php の下に配置されます。両方のファイルの名前が php であることに注意してください。 make install 中に何が起こるかは、設定行によって異なります。 apxs などの SAPI モジュールが構成中に選択されている場合、または –disable-cgi パラメーターが使用されている場合、CGI が got に配置されていない限り、CLI は make install プロセス中に {PREFIX}/bin/php にコピーされます。その位置。したがって、たとえば、configure 行に –with-apxs がある場合、CLI は make install 中に {PREFIX}/bin/php にコピーされます。 CGI 実行可能ファイルのインストールを元に戻したい場合は、make install の後に make install-cli を実行します。あるいは、構成行に –disable-cgi パラメータを追加することもできます。
CLI SAPI と他の SAPI モジュールの大きな違いは次のとおりです:
* CGI SAPI とは異なり、その出力にはヘッダー情報がありません。 CGI SAPI には HTTP ヘッダー情報を抑制するメソッドが用意されていますが、CLI SAPI には HTTP ヘッダー情報の出力を有効にする同様のメソッドはありません。 CLI はデフォルトで Quiet モードで起動しますが、互換性を確保するために、-q パラメータと –no-header パラメータは下位互換性のために保持されており、古い CGI スクリプトの使用が可能です。実行中、作業ディレクトリはスクリプトの現在のディレクトリに変更されません (CGI モードとの互換性のために -C および –no-chdir パラメータを使用できます)。エラー発生時に平文エラーメッセージ(HTML形式ではない)を出力します。
* CLI SAPI は、php.ini の特定の設定を強制的にオーバーライドします。これは、これらの設定がシェル環境では意味を持たないためです。
nginx+php-fpm 実装原理と問題記録