Linuxなどのメモ書き
リンク

その他のWiki
Linuxメモ
Xnuメモ

会社
(有)ビットハイブ
受託開発やってます。

よくやる仕事

・Webシステム開発(LAMP環境)
・Linuxサーバー設定関連
サーバー移転作業代行

 

検索

Adsense

PHP CGIでの実行


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コマンドにリダイレクトさせることによって、CGI実行することもできる。この場合は、4.1に較べ#!の指定も必要なくなる。

まず、DocumentRoot(以下の例では/usr/local/www)にCGI SAPI版phpコマンドを置く。以下の例ではcgi-binディレクトリにphp.cgiへのシンボリックリンクを作成している。

# cd /usr/local/www/cgi-bin
# ln -s /usr/local/bin/php.cgi .

そして、以下の用に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>

 上記の設定により、test.phpは/cgi-bin/php.cgi(/usr/local/bin/php.cgi)から実行されるようになるので、#!によるコマンドの指定もいらなくなり、モジュール動作時と同じソースコードでCGI実行できるようになる。

CGI版PHPでのスクリプト

<?php
print "foo";
?>

関連ページ


最終更新 2007/07/12 13:18:34 - kztomita
(2007/07/12 11:48:33 作成)