アプリ版:「スタンプのみでお礼する」機能のリリースについて

PHPのCGIモードとについて

PHPのCGIモードというのがよく分かりません。
自分はcentOSにソースコードからPHPを入れております。
で、主にApacheと連携させています。
ただ、最近は
#!/usr/local/bin/php -q
などを最初に書いてコマンドラインからの使用が多くなっております。

自分は
./configure --with-apxs2=/usr/local/apache2/bin/apxs --with-freetype-dir=/usr/local/lib --with-gd --with-mysqli=/usr/local/mysql5.5/bin/mysql_config --with-pdo-mysql=/usr/local/mysql5.5 --with-mysql-sock=/var/lib/mysql/mysql.sock --with-zlib --with-xsl=/usr/lib --enable-mbregex --enable-mbstring --enable-bcmath --with-mcrypt --disable-posix-threads --enable-bcmath --with-readline --with-curl=/usr/local/curl --with-curlwrappers --with-openssl --with-openssl-dir=/usr/lib64/openssl --enable-pcntl
のようにしているのですが、これでCGIモードにはなっているのでしょうか?

いまいち概念が掴めないでおります。
具体的な事例や、CGIモードでない場合との違いなどを教えていただけないでしょうか?

また、CGIモードにするために何かphp.ini等で設定をするような事があるのであれば、
どのようにしてCGIモードとして使えるようになるのかをアドバイスいただきたいと思います。

A 回答 (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ファイル経由で、 自分のファイルを盗み見されることなどないので
モジュール版を使っていいんじゃないでしょうか。
    • good
    • 0
この回答へのお礼

分かりやすい説明ありがとうございます。
非常に参考になりました。

お礼日時:2012/01/12 23:18

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!