btoメモ

なんか適当に書く

複数のバージョンのPHPを簡単に切り替える

PHP のプログラムにはバージョンによって動いたり動かなかったりするものがあります。

特にバージョン4, 5の違いは大きいので、これを簡単に切り替える方法を試行錯誤しながらやってみたら結構うまくいきました。

まず前提として mod_php は使いません。さすがに Apache のモジュールで複数バージョンを共存させるのは無理なので、PHPCGI で動作させます。これなら呼び出し先の PHP プログラムを変更するだけですむので、簡単にバージョンの切り替えができます。

複数バージョンのインストールについては前回のエントリtarballからインストールしたソフトウェアを簡単に管理するを参照してください。

インストールする時に注意するのは --with-apxs2 とかのオプションをつけて apache のモジュールをコンパイルしないことです。そうすると、勝手に CGI 用にコンパイルしてくれます。

あるいは --enable-cgi をつけるといいかも。(未確認)

インストールが終わったら PHPCGI プログラムとして呼び出されるように Apache の設定を変更します。

Fedora の場合は

ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"

と定義されていますので、/var/www/cgi-bin にファイルを追加してやるだけですみます。

sudo ln -s /opt/php/bin/php /var/www/cgi-bin/php
sudo ln -s /opt/pkgs/php-4.4.2/bin/php /var/www/cgi-bin/php-4.4.2
sudo ln -s /opt/pkgs/php-5.1.2/bin/php /var/www/cgi-bin/php-5.1.2

デフォルトの設定だと /var/www/cgi-bin でシンボリックリンクが許可されてなかったので、次の設定を apache に追加しました。

<Directory /var/www/cgi-bin>
Options FollowSymLinks
</Directory>

これで PHPCGI プログラムとして呼び出す準備が整いました。

次に .php のファイルのアクセスに対して自動的に PHP が呼ばれるように設定します。

以下の内容で /etc/httpd/conf.d/php.conf を追加します。

Action php-script /cgi-bin/php
Action php-script-4.4.2 /cgi-bin/php-4.4.2
Action php-script-5.1.2 /cgi-bin/php-5.1.2
AddHandler php-script .php
DirectoryIndex index.php

これで .php へのアクセスに対してはデフォルトの PHP(/cgi-bin/php) が呼ばれるようになります。

php-script-4.4.2, php-script-5.1.2 は切り替え用なので、デフォルトでは使用されていません。

ようやく全ての準備が整いました。何もしなければ、デフォルトの PHP が使用されます。

違うバージョンの PHP を使用したい場合は、.htaccess

AddHandler php-script-4.4.2 .php

と書くことで簡単に切り替えを行うことができます。

適当なところで phpinfo() の出力を見てみましょう。

ちゃんと切り替わっているはずです。