
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で質問しましょう!
似たような質問が見つかりました
- PostgreSQL PostgreSQL14.6のSSL対応について 1 2023/01/05 15:42
- その他(プログラミング・Web制作) mariadbでのエラー 1 2022/11/15 12:31
- その他(プログラミング・Web制作) python 2 2022/12/23 09:06
- UNIX・Linux postfix smtpサーバーリレーがTLSハンドシェーク失敗 1 2022/08/15 15:45
- CGI -T(汚染モード)でメールが送れません 1 2022/06/12 14:11
- Ruby Ruby / passenger のインストールについて 1 2023/01/30 18:31
- MySQL Mac です。ローカルホストの phpMyAdmin にアクセスできません。 1 2023/06/06 17:14
- UNIX・Linux cronの@rebootでのdateコマンドの実行につきまして 2 2023/06/11 16:23
- 英語 提示分の"with"の使い方等について 1 2022/08/23 10:40
- MySQL MySQL,JavaScript,PHPコードの結果を表示する方法を教えてください。 1 2023/02/13 17:49
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
プログラム単語のsetageとかのa...
-
require_onceが動いていない
-
PHPで、C#のプログラムを実行す...
-
PHPでコマンドプロンプトを実行...
-
mysql複数レコードをまとめて削...
-
PHPのif文でその処理を途中で抜...
-
FTPコマンドでディレクトリごと...
-
microSDの装着による連続待受時...
-
mb_convert_encodingについて
-
ダウンロードすると画像が壊れ...
-
php.iniのエンコーディングの設...
-
「クラウドにアップロード」」...
-
どのように読み込んでるのでし...
-
session_startでクッキー範囲を...
-
phpでお問い合わせフォームを作...
-
ライブドアブログにPHPスクリプ...
-
引数を正しく読み込む方法
-
上位ディレクトリ名(フォルダ...
-
PHPスクリプトにプロキシを弾か...
-
path文字列の操作
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
mysql複数レコードをまとめて削...
-
シェルスクリプトをPHPで動かそ...
-
PHPでコマンドプロンプトを実行...
-
require_onceが動いていない
-
ヒアドキュメントの中で演算子...
-
PHPでサーバーにインストールさ...
-
php実行中に実行中のphpファイ...
-
社内LANで複数台のPCからApache...
-
ブラウザからexecコマンドを実...
-
PHPからバッチファイルの実行
-
Switch文における、returnとbre...
-
PHPからPostgreSQLのダンプを実行
-
正常に動作しない
-
htmlでsubmitで指定したAction...
-
PHPファイルをcronで実行す...
-
[cakePHP]外部ファイルの実行方法
-
テルネットしコマンドを自動実行
-
copy() で属性保存
-
PHP+MySQLでrollback出来ない
-
入力してからn時間(日)後、DBデ...
おすすめ情報