2009年2月13日金曜日

php5をyumでいれたCentOS5でphp4も使わせる(CGI版)

php4を使っているサーバは結構ある。
そこで動かしているものを新規に作ったサーバに移そうとするといろいろ弊害、phpもその1つ。
 

CentOS5.2では php を楽なパッケージ管理で導入すると php5 が入る。そこでphp4を動かす情報が沢山あったので好みのやつを試してみた。
 
 

ということで、こちらで紹介されている方法ですんなりできた。
PHP4とPHP5を安全に共存させる方法 < < ぎじゅっやさん
 

サイトの例とは逆なんだけどね。
PHP4をApacheのモジュールとして、
PHP5をCGIとしてインストールする仕様で考える。
自身がメインで使用する方をモジュールにするといいだろう。
PHP4のインストールは特別変わらないので割愛。
引用:ぎじゅっやさん

 

じゃあちょっと php4.4.9 を入れてみる。オプションはとりあえず最低限で。
./configure --prefix=/data/php4 --exec-prefix=/data/php4 --enable-force-cgi-redirect
他のサイトで "/data/" と切っているのがあったから、実験という事もあってまねてみた。
 

こういうとき実際は"/usr/local/php4.4.9" に入れて、"/usr/local/php4" というリンクを張るのが好きだったりする。
 
 

後も同じ、ScriptAlias の指定があるところ (ScriptAlias /cgi-bin/ "/var/www/cgi-bin/") にphpのバイナリ (/data/php4/bin/php) をコピーして、apacheのコンフィグを下記のように。
 

Actionは何処かに1つ。php.conf に書いちゃってもいいかな。
あとは お好きなディレクティブで AddHandler を指定すればOK.

Action php4-script /cgi-bin/php4
<Directory "/var/www/html/php4">
Options ExecCGI
AddHandler php4-script .php
</Directory>

 

結果...
 

http://{サーバ}/phpinfo.php
コレはphp5 で動いて (Server API Apache 2.0 Handler )
http://{サーバ}/php4/phpinfo.php
コレはphp4 で動く (Server API CGI )
 
 


phpinfo.php の中身は言うまでもないけどこんな感じ。
<?php phpinfo() ?>
 

ところでCGIってことは、Perlみたいにphpスクリプトの一行目に "#!/data/php4/bin/php" で、phpのバイナリコピーしておかなくても動くかな?
 

とやってみたらエラーが出た。
Security Alert!
The PHP CGI cannot be accessed directly.
 
This PHP CGI binary was compiled with force-cgi-redirect enabled. This
means that a page will only be served up if the REDIRECT_STATUS CGI variable is
set, e.g. via an Apache Action directive.

 

あ、駄目だった。しかもあのオプションのせいなのね。
オプションつけなかったら出来るかもね、危なっかしそうだからやめたほうがよさげだが。