出典:http://www.jb51.net/article/37759.htm
1. Apache での PHP 実行モード
php には、CGI モード、FastCGI モード、Apache モジュール DLL の 3 つの動作モードがあります
以下を比較してください:
1. CGI モードとモジュール モードの比較:
Apache での php の 2 つの作業方法 (CGI モード、Apache モジュール DLL) の違い
これら 2 つの作業方法のインストール:
Apache 2.0 における PHP の CGI アプローチ
ScriptAlias /php/「c:/php/」
AddType application/x-httpd-php .php
PHP 4 の場合はこの行を使用します
Action application/x-httpd-php "/php/php.exe"
PHP 5 の場合はこの行を使用します
Action application/x -httpd-php “/php/php-cgi.exe”
Apache 2.0 の PHP モジュール モード
PHP 4 には次の 2 行を使用します:
LoadModule php4_module “c:/php/php4apache2.dll”
sapi ディレクトリから php4apache2.dll をコピーすることを忘れないでください。
AddType application/x-httpd-php .php
PHP 5 の場合は、次の 2 行を使用します:
LoadModule php5_module “c:/php/php5apache2.dll”
AddType application/x-httpd-php .php
php.iniのパスを設定
PHPIniDir「C:/php」
これら 2 つの作業方法の違い:
CGI モードでは、クライアントが php ファイルを要求すると、Web サーバーは php.exe を呼び出してファイルを解釈し、解釈結果を Web ページの形式でクライアントに返します。
モジュラー (DLL) では、PHP が開始され、Web サーバーと一緒に実行されます。
したがって、ある観点から見ると、Apache モジュール モードでインストールされた PHP4 は、CGI モードよりもセキュリティが高く、実行効率と速度が優れています。
2. FastCGI 動作モード分析:
FastCGI の仕組み:
(1) Web サーバーの起動時に FastCGI プロセス マネージャーをロードします [PHP の FastCGI プロセス マネージャーは PHP-FPM (php-FastCGI プロセス マネージャー)] (IIS ISAPI または Apache モジュール)。
(2) FastCGI プロセス マネージャーは自身を初期化し、複数の CGI インタプリタ プロセス (タスク マネージャーには複数の php-cgi.exe が表示されます) を起動し、Web サーバーからの接続を待ちます。
(3) クライアント要求が Web サーバーに到達すると、FastCGI プロセス マネージャーが CGI インタプリタを選択して接続します。 Web サーバーは、CGI 環境変数と標準入力を FastCGI サブプロセス php-cgi.exe に送信します。
(4) FastCGI サブプロセスは処理が完了すると、標準出力とエラー情報を同じ接続から Web サーバーに返します。 FastCGI 子プロセスが接続を閉じると、リクエストが処理されます。次に、FastCGI 子プロセスは、FastCGI プロセス マネージャー (WebServer で実行されている) からの次の接続を待機して処理します。 通常の CGI モードでは、php-cgi.exe はここで終了します。
上記のケースでは、CGI が通常どれほど遅いか想像できるでしょう。 PHP へのすべての Web リクエストでは、php.ini を再解析し、すべての DLL 拡張機能を再ロードし、すべてのデータ構造を再初期化する必要があります。 FastCGI では、これらすべてがプロセスの開始時に 1 回だけ行われます。さらに、永続的なデータベース接続が機能するという利点もあります。
(1) Windows プラットフォームではマルチスレッド CGI インタプリタを安定して使用することはできません。IIS ISAPI メソッドであっても、APACHE Module メソッドであっても、しばらく実行すると必ずクラッシュします。不思議ですか?しかし、そのような状況は実際に存在します!
もちろん、マルチスレッド CGI インタプリタを安定して使用できる場合も多くありますが、FastCGI に切り替えると、Web ページにエラーが発生し、その原因が見つからない場合があります。このようなエラーの削減は大幅に増加します。これがなぜなのかはわかりませんが、結局のところ、独立したアドレス空間を持つ CGI インタプリタのほうが、共有アドレス空間形式よりももう少し安定しているのではないかと思います。
(2)、パフォーマンス!パフォーマンス?可能ですか、FastCGI はマルチスレッド CGI インタプリタよりも高速ですか?しかし、それが真実である場合もあり、Web サイトをテストすることによってのみ最終的な結論を下すことができます。理由は言うのが難しいと思いますが、Zend WinEnabler の時代に、Zend は当初 Windows プラットフォームで IIS ISAPI や Apache Module の代わりに FastCGI を使用することを推奨していましたが、現在 Zend はこの製品を製造していません。
最後に、PHP5 と PHP4 を同時に実行できます。以下の構成ファイルを参照して、2 つの仮想ホストが確立されました。1 つは PHP5 を使用し、もう 1 つは PHP4 を使用しました。
コードをコピーします コードは次のとおりです:
LoadModule fastcgi_module modules/mod_fastcgi-2.4.2-AP13.dll
ScriptAlias /fcgi-php5/ “d:/usr/local/php-5.0.4/”
FastCgiServer “d:/usr/local/php-5.0.4/php-cgi.exe” - プロセス 3
ScriptAlias /fcgi-php4/ “d:/usr/local/php-4.3.11/”
FastCgiServer “d:/usr/local/php-4.3.11/php.exe”
80を聞いてください
名前仮想ホスト *:80
DocumentRoot d:/www
オプション インデックス FollowSymlinks マルチビュー
サーバー名 php5.localhost
AddType application/x-httpd-fastphp5 .php
アクション application/x-httpd-fastphp5 “/fcgi-php5/php-cgi.exe”
IndexOptions FancyIndexing FoldersFirst
オプション インデックス FollowSymLinks マルチビュー
許可オーバーライドなし
注文の許可、拒否
すべてから許可
8080を聞いてください
NameVirtualHost *:8080
DocumentRoot d:/www
オプション インデックス FollowSymlinks マルチビュー
サーバー名 php4.localhost
AddType application/x-httpd-fastphp4 .php
アクション application/x-httpd-fastphp4 “/fcgi-php4/php.exe”
オプション インデックス FollowSymLinks マルチビュー
許可オーバーライドなし
注文の許可、拒否
すべて許可します
上の構成を使用し、http://localhost/ を使用して PHP5 を使用し、http://localhost:8080/ を使用して PHP4 を使用します。のPHP。
FastCGI モードのいくつかのポイント:
私の実際の使用例からわかるように、FastCGI モードの使用は、環境を作成するのに適しています。ただし、Zend Studio 調整プログラムを使用する場合は、 FastCGI は PHP プロセスのオーバータイムであると認識するため、トップページで 500 ビットのメッセージを返します。
最後に、Windows 中に FastCGI モードで潜在的な安
(2) この両者は、spawn-fcgi が lighttpd の一部であるため、通常、spawn-fcgi の php サポートを使用してインストールされますが、現時点では便利な spwan-fcgi を使用することもできます。高レベルでアクセスが行われると、高速 CGI が自動的に起動する場合でも、上部の内部ストレージ リークが発生する可能性があります。このとき、ユーザーがアクセスすると、ホワイト エラー (つまり、PHP が解析できないか出力できない) が発生する可能性があります。
同時に、spawn-fcgi は処理速度が高く、高速 CGI プロセッサーを自動起動しないため、より優れています。現在のパフォーマンス优越、越来越多くの人がこの組み合わせを使用しています:nginx+PHP/PHP-FPM
3、IIS+ ISAPI モード このモードは、生成環境での使用が少なく、生成環境に適しています。 現在、HTTPServer ではこの基本的なスタック比の流行が 3 つ確認できます:(1)Apache+mod_php5
(2)lighttp+spawn-fcgi
(3)nginx+PHP-FPM
3 つのどちらのパフォーマンスも優れている可能性がありますが、Apache は豊富なモジュールと機能を備えているため、現在では古いほうだと考えられています。 、nginx+PHP-FPM を使用する人はますます増えています。