2012-12-27 8 views
6

可能な重複(lighttpdのような)(以下に示すように)lighttpdのコンフィグで
I never really understood: what is CGI?PHPはHTTPサーバとどのように対話しますか?

、我々は、それらの一つはPHPのバイナリが、他の2つのパスを定義しますソケットパスです。私の質問は、lighttpdがPHPによって作成された最終的なHTML出力をフェッチする点です。バイナリは応答としてlighttpdに出力しますか?あるいは、別の場所に一時ファイルを作成し、サーバーがそれを取得しますか?

fastcgi.server = (".php" => ((
        "bin-path" => "/usr/bin/php-cgi", 
        "socket" => "/tmp/php.socket" 
       ))) 
+0

パイプは通常です([CGI](http://en.wikipedia.org/wiki/Common_Gateway_Interface)参照)。しかし、この設定はソケットを指定しているので、おそらくFastCGIバイナリを使用しています。 – mario

+1

重複していません。 configスニペットはCGIではなくFastCGIについてです。 bin-pathはlightyがバックエンドを生成することを意味し(外部的に生成することとは反対に)、ソケットは "unix socket"(名前付きパイプではなく、実際のソケット)へのパスです。 lightyはブラウザがWebサーバーに接続するのと同じ方法で、各要求に対してこのソケットに接続しますが、詳細については別のプロトコルを使用します。 – Stefan

+0

この質問は重複していないため、「複製」ステートメントを削除してください。 – tolga

答えて

1

PHPは、CGIバイナリとして、またはApacheモジュールとして実行できます。 CGIバイナリとして使用される場合、HTTPサーバーはpipesまたはnamed pipesを介してPHPと通信します。これらは、ディスクアクセスを必要としないプロセス間通信の一形態であるstdoutを利用することができます。 Apacheモジュールとして実行する場合、PHPは実質的にApacheサーバーの一部です。これは、CGIとして実行されるよりもはるかに高速ですが、セキュリティ上の制限があります。

1

私の理解から(それはまだ始まっていない場合)socketは、サーバーへの要求が一度起動プロキシに使用されているのに対し、bin-pathは、FastCGIのサーバを起動するために使用されます。

したがって、最終HTMLは、要求が処理された後に/tmp/php.socketから取得されます。ネットワークソケットとは対照的に名前付きパイプですが、他の点ではまったく同じです。

関連する問題