PHP CGIでの実行
Rev.3を表示中。最新版はこちら。
1. 概要
PHPスクリプトをApacheモジュールからではなくCGIとして実行する場合のメモ。
2. 環境
Linux(Fedora Core 4)PHPは5.0.4がインストール済み(CLI SAPI)
3. CLI版(CLI SAPI)バイナリを使う場合
最初からインストールされているCLI SAPI版PHPを使ってphpスクリプトをCGI実行する例。
apache httpd.conf例
# スクリプトを置くディレクトリについて # .phpファイルをCGIとして実行するように設定 <Directory /usr/local/www> AddHandler cgi-script .php Options +ExecCGI </Directory>
#!/usr/bin/php <?php print "Content-Type: text/html\n\n"; print "foo"; ?>
CLI版を使用した場合は、PerlなどによるCGIスクリプトと同様に#!によるコマンドの指定や、HTTPヘッダ(Content-Type)の出力処理が必要になる。
4. CGI版(CGI SAPI)バイナリを使う場合
CGI版のPHPを使うとスクリプト内で#!やHTTPヘッダの出力をせずに、モジュール動作時と同じような処理でCGI実行できる。CLI/CGI版の違いやコンパイルの仕方は「PHP CGIでの実行」参照。
以下の例ではCGI SAPIバイナリは/usr/local/bin/php.cgiにインストールしたものとして説明する。
4.1 phpコマンドをWebツリーの外に置く場合
phpコマンドがWebツリー外(/usr/local/bin/php.cgi等)にあり、それを使用する場合はApacheのconfigはCLI SAPIの時と同じで以下のようにして置けばよい。apache httpd.conf例
# スクリプトを置くディレクトリについて # .phpファイルをCGIとして実行するように設定 <Directory /usr/local/www> AddHandler cgi-script .php Options +ExecCGI </Directory>
スクリプトについては、CGI SAPI版ではHTTPヘッダは自動で出力されるので、スクリプト内でprint "Content-Type: text/html\n\n";をする必要はなくなる。#!によるコマンドの指定は必要。
CGI版PHPでのスクリプト
#!/usr/local/bin/php.cgi <?php # ヘッダは自動で出力されるので不要 # print "Content-Type: text/html\n\n"; print "foo"; ?>
4.2 Action設定によるリダイレクトを使う場合
phpコマンドをWebツリー内に置いておき、ApacheのAction設定によりスクリプトへのRequestをphpコマンドにリダイレクトさせることによって
以下のconfig例では、http://www.xxxx.com/test.phpへのアクセスはhttp://www.xxxx.com/cgi-bin/php.cgi/test.phpへのアクセスとしてリダイレクトされる。
apache httpd.conf例
<ScriptAlias /cgi-bin/ "/usr/local/www/cgi-bin/"> <Directory /usr/local/www> AddHandler php4-script .php # .phpファイルでは/cgi-bin/php.cgiを実行 Action php4-script /cgi-bin/php.cgi # FollowSymLinksでリンクをたどれるようにしておく Options +ExecCGI +FollowSymLinks </Directory>
CGI版PHPでのスクリプト
<?php print "foo"; ?>