- ベストアンサー
PHPのCGIモードとは?
- PHPのCGIモードについて調査しました。CGIモードは、PHPをコマンドラインで使用するためのもので、Apacheと連携しない状態です。
- 具体的な事例やCGIモードでない場合との違いについても調査しました。CGIモードでは、PHPスクリプトを直接実行することができ、独立して動作します。
- CGIモードにするためには、php.iniファイルを編集する必要があります。具体的な設定方法についても調査しました。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
・configure + makeしたときに、どんなモジュールや実行ファイルが生成される ・実際に、apacheでどのようにphpを呼び出すように設定しているか (拡張子毎に設定可能) というのは、別の話です。 上記のconfigureだと --with-apx2があるので、apache用のモジュール(libphp.so)が生成され それとは別に、--disable-cgiがないので、 多分、 CGI版の実行ファイル(make installで/usr/local/bin/php等) も生成されていると思います。 (もしかして、PHPのバージョンによっては、 --enable-cgiがないと CGI版でなく、CLI版のphpが生成されるとかもあるかもしれません) なお、CGI版とCLI版の違いは、perlと同じように外部プログラムとして使える 実行ファイルができる点は同じですが、 実行時に HTTPヘッダを出力するか しないかが大きく違いますので、 サーバーにログインして直接コマンドラインでphpのスクリプトを実行したり、 cronでphpスクリプトを実行するのみに使う場合はCLI版のほうが使いやすいですし、 WebアプリのCGIとしてPHPを実行したい場合は CGI版のほうが便利です。 (CGI版でも-q付けてHTTPヘッダださないとかできますが) で このモジュール版とCGI版の2つファイルができたとして、 それをphp言語で記述したファイルをWebアクセスしたとき ・apacheのモジュールとしてPHPを実行 (apacheのプロセス内で実行) ・apacheからCGIという仕組みを使って外部プログラムとしてCGI版のPHPスクリプトを実行 (apacheと別のプロセスで実行) の2通りの呼び出しかたができることになりますが、 これはapacheの設定次第になります。(php.iniでなく、httpd.conf) これは、拡張子毎に設定できるので、 たとえば、コンテンツファイルの拡張子が、 *.phpのときはapache内のPHPモジュールを実行 *.cgiのときは、CGI経由で、*.cgiファイル先頭の #!~の指定で、外部プログラムの/usr/local/bin/php を実行 ということも httpd.confの設定次第で可能になります。 で apacheのモジュールとしてPHPを実行するのと、CGIでCGI版PHPを実行する の大きな違いは、実行時のパフォーマンスと、セキュリティー らしいです。 モジュール版のほうが、実行速度は速く、サーバーへの負荷も少ないです。 ただし、レンタルサーバー(多くのユーザーが共有して使う)の場合、セキュリティー的な問題から CGI版を使うように設定されているケースが多いです。 自分専用サーバーで 自分でコンテンツも用意し、監視できるのなら 他人がそのサーバー内に設置したphpファイル経由で、 自分のファイルを盗み見されることなどないので モジュール版を使っていいんじゃないでしょうか。
お礼
分かりやすい説明ありがとうございます。 非常に参考になりました。