
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モードとして使えるようになるのかをアドバイスいただきたいと思います。
No.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ファイル経由で、 自分のファイルを盗み見されることなどないので
モジュール版を使っていいんじゃないでしょうか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PHPからシェルコマンドの実行
-
mysql複数レコードをまとめて削...
-
JSのWINOW.CONFI...
-
PHPのif文でその処理を途中で抜...
-
ボタンのクリック数を合計保存...
-
Subversionのリポジトリの削除
-
SendMailがエラーを返さない
-
.phpファイルが、表示されない
-
PHPでメールを受信するには?
-
PHPSpreadsheetによる書き出し...
-
FTPコマンドでディレクトリごと...
-
SQLiteに画像を格納したい
-
別ファイルの変数を呼び出した...
-
リンク先を隠す方法はないでし...
-
ビットマップ画像を読み込むプ...
-
inputタグでphpを呼び出す際、...
-
CFileDialogの最初のディレクト...
-
php,mysqlにて画像パス保存/表...
-
ラッパークラスって何ですか?
-
TCPDFについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
mysql複数レコードをまとめて削...
-
if文が入れ子の場合の条件の解釈
-
PHPをPostgreSQLに接続するには?
-
httpdのプロセスが自動で消えな...
-
PHPでサーバーにインストールさ...
-
スクリプトを実行すると警告が...
-
Prompt入力値をphp変数として取...
-
プログラム単語のsetageとかのa...
-
PHPから環境変数'PATH'が使えない
-
Maximum execution time of 30 ...
-
あるphpから他のPHPプロ...
-
JSのWINOW.CONFI...
-
PHPからバッチファイルの実行
-
perl -e "print 'A';"
-
PHPからシェルスクリプトを実行
-
PHPからCRONの編集
-
PHPでコマンドプロンプトを実行...
-
ヒアドキュメントの中で演算子...
-
【PHP】命令は記述順に処理...
-
mod_phpで、rootしか実行できな...
おすすめ情報