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ランキング
-
PHPからexecを使ってGnuPGを実...
-
httpdのプロセスが自動で消えな...
-
PHPからバッチファイルの実行
-
【PHP】命令は記述順に処理...
-
mysql複数レコードをまとめて削...
-
シェルスクリプトをPHPで動かそ...
-
一時停止のコマンドはありますか?
-
phpスクリプトのみで定期実行
-
PHPの中間コード
-
system()関数の使い方について
-
Prompt入力値をphp変数として取...
-
phpからエクセルのマクロを実行...
-
データベースの中にあるソース...
-
ブラウザからexecコマンドを実...
-
ヒアドキュメントの中で演算子...
-
こちらはただの直列処理ですか?
-
フォントの色を変えるには?
-
onedrive にexcelファイルをア...
-
form actionで二つ送信先を指定...
-
シェルスクリプトからphpファイ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
mysql複数レコードをまとめて削...
-
php5-extensions を make でき...
-
php実行中に実行中のphpファイ...
-
ヒアドキュメントの中で演算子...
-
シェルスクリプトをPHPで動かそ...
-
phpからエクセルのマクロを実行...
-
PHPからバッチファイルの実行
-
query、prepare、executeの違い
-
PHPからCプログラムを実行して...
-
Switch文における、returnとbre...
-
PHPからlhaコマンドを使いたい
-
あるphpから他のPHPプロ...
-
CRON でPHPスクリプトをGET変数...
-
JSのWINOW.CONFI...
-
PHPの中間コード
-
別サーバのプログラムを起動
-
copy() で属性保存
-
phpスクリプトのみで定期実行
-
PHPで、C#のプログラムを実行す...
-
PHPからPostgreSQLのダンプを実行
おすすめ情報