こんにちは、田中です。
先日、CGI版PHPが動いているサーバーにPHPプログラムを入れることがありました。
その際ファイルの先頭に決まった一文を入れたり実行権限を付けたりしていましたが、
そういう調整をしなくて済む方法があることにその後気付いたので、その方法をまとめます。
従来の方法
PerlでもPHPでも、Apacheを通してCGI版を動かすときは、
・Apache設定ファイルをCGIスクリプトとして紐付け、
・ファイルの先頭に”#!実行パス”を記述し、
・ファイルに実行権限を付ける
という手順を踏む必要があります。
<index.php>
=======================================
#!/usr/bin/php
<?php
echo “test”;
?>
=======================================
<.htaccessまたはhttpd.conf>
=======================================
<Directory /var/www/html/demo>
AddHandler cgi-script .php
Options +ExecCGI
</Directory>
=======================================
action_moduleを使えば上記の調整は不要
しかし、CGI版でもApacheの設定によってファイル先頭の実行パスが不要になる方法があります。
Apacheの中に実行パスを記述し、そこからプログラムを動かす方法です。
<index.php>
=======================================
<?php
echo “test”;
?>
=======================================
<.htaccessまたはhttpd.conf>
=======================================
ScriptAlias /cgi-bin/ “/var/www/html/demo/cgi-bin/”
<Directory /var/www/html/demo>
AddHandler php5-script .php
# .phpファイルでは/cgi-bin/php-cgiを実行
Action php5-script /cgi-bin/php-cgi
# FollowSymLinksでリンクをたどれるようにしておく
Options +ExecCGI +FollowSymLinks
</Directory>
=======================================
あらかじめ、
/var/www/html/demo/cgi-bin/php-cgi => /usr/bin/php-cgi
のシンボリックリンクに設定しておく。
(ドキュメントルートが/var/www/html/demoにある場合)
/cgi-bin/を/var/www/html/demo/cgi-bin/のエイリアスに設定。
/var/www/html/demoの下にある.phpファイルを
/cgi-bin/php-cgiから実行する。
Actionディレクティブを使うためにはactions_moduleがロードされている必要があります。
LoadModule actions_module modules/mod_actions.so
<参考にしたサイト>
PHP CGIでの実行 – とみぞーノート
http://wiki.bit-hive.com/tomizoo/pg/PHP%20CGI%A4%C7%A4%CE%BC%C2%B9%D4
モジュール版のPHPを変更なしでCGI版で動作するPHP5のインストール -BSDあれこれ
http://www.macminiosx.com/2009/03/phpcgiphp5.html
パスを通すだけなので当然ですがPHP4でも可能です。
CGI版かモジュール版かを確認
PHPがCGI版で動いているか、モジュール版で動いているか確認するためには
phpinfo()のServerAPIを見ます。
参考:phpの動作モードを調べる(CGI版?モジュール版?)
http://server-domain.info/report/check-php-cgi-module.html