Home > サーバー技術情報 > Apache2で複数バージョンのPHPを使い分ける

Apache2で複数バージョンのPHPを使い分ける

Buzzurlにブックマーク livedoorクリップ Yahoo!ブックマークに登録 このエントリーを含むはてなブックマーク

PHPのプログラムはバージョンによって動作におおきな差があります。
検証やら、ホスティングやら、、、
違うバージョンのPHPを共存させる必要ってどうしても出てきてしまいます。
というわけで、複数バージョンのPHPを共存させる方法です。


まずはメインとして使うPHPのバージョンを決めちゃいましょう。
まずはそのバージョンのPHPをApacheのモジュール版として通常通りインストールします。
→(参考:PHPのインストール)

その他違うバージョンのPHPはCGI版として動作させます。
ここでは既にPHPの5.2.xがApacheのモジュール版としてインストールされている環境で
新たにPHPの4.4.9をCGI版としてインストールし、簡単に切り替えれるようにしてみます。


PHP4.4.9のインストール(CGI版)


ソースを持ってきて展開し、configureします。

tar zxvf php-4.4.9.tar.gz
cd php-4.4.9
 
./configure  --prefix=/usr/local/lib/php-4.4.9 \
--with-config-file-path=/usr/local/lib/php-4.4.9 \
--enable-force-cgi-redirect \
--enable-mbstring \
--enable-mbstr-enc-trans \
--enable-track-vars --enable-mbregex \
--with-mysql=/usr/local/mysql \
--with-pgsql=/usr/local/pgsql \
--with-zlib-dir=/usr/include/ \
--with-gd \
--with-jpeg-dir=/usr/include \
--with-png-dir=/usr/include \
--program-suffix=4



configureの際に–with-apxs2=/usr/local/apache2/bin/apxsを付けない事が重要です。
これを付けるとApacheのモジュール版としてPHPがconfigureされてしまいます。
このオプションをつけなければ勝手にCGI版としてインストールされます。
その他のオプションはご自身の環境に合わせて適宜修正していただくとして、
複数インストールの際に重要となってくるのは以下のオプションになります。

–prefix=/usr/local/lib/php-4.4.9
インストールするディレクトリを明示的に指定します。
ここでは/usr/local/lib/php-4.4.9にインストール先を指定しています。

–with-config-file-path=/usr/local/lib/php-4.4.9
コンフィグファイルのパスも明示的に指定しています。

–program-suffix=4
必須ではないのですがこのオプションを付けるとファイルの語尾に特定の文字を付加させる事ができます。
管理が複雑にならないようにする為、今回のプログラムのファイル名の語尾へは「4」と追加させるようにしています。

ここまででエラーがなくconfigureできたらインストールします。

make
make install




簡単に切り替える為の設定例

ここまでで
/usr/local/lib/php-4.4.9/bin/php4
を呼び出す事でphp4としてそのプログラムを動かす事が出来ますが、
もっと簡単にする為にApacheの設定を変更します。

Apacheをインストールした際にhttpd.confのデフォルトでは

ScriptAlias /cgi-bin/ "/usr/local/apache2/cgi-bin/"



とスクリプトエイリアスが貼ってあったのでこれを利用します。
ここへphp4のスクリプトのシンボリックリンクを作成する事で、
それぞれのユーザーが自由に指定できるようにしてみたいと思います。

まずApacheの設定で、/usr/local/apache2/cgi-bin/以下のディレクトリへ
シンボリックリンクの作成の許可を追加します。
httpd.confにのディレクティブ項目があると思うので

<Directory /usr/local/apache2/cgi-bin/>
    Options FollowSymLinks
</Directory>


のようにOptions FollowSymLinksを追記し、シンボリックリンクの作成を許可します。
作成の許可を追加したのでcgi-bin以下へphp4の実行ファイルをシンボリックリンクを作成します。

cd /usr/local/apache2/cgi-bin/
ln -s /usr/local/lib/php-4.4.9/bin/php4 php4



これで準備は完了です。
ここではスクリプトエイリアスとしてcgi-binというフォルダを利用していますが、
実際に完全にサービスとして提供した場合
cgi-binという名前のフォルダを実際にユーザー様が作って重複した場合は
いろいろと問題になるかもしれません。

いろいろ試して、自身に合った設定を検証するのがベストです。

実際の使い方の例

実際に使う場合はスクリプトエイリアスの設定がしっかりとされている事が必須です。

Action php4-script /cgi-bin/php4
AddHandler php4-script .php .html


といったコードを使用しますがこれはあくまでも

ScriptAlias /cgi-bin/ "/usr/local/apache2/cgi-bin/"



というスクリプトエイリアスがhttpd.confにてデフォルトで設定されている事を利用したものです。


ディレクトリごとに切り替える
そのディレクトリが.htaccessを許可している
(ディレクトリーの設定でAllowOverride Allを指定している)場合は、
.htaccessで任意のディレクトリごとに切り替える事が可能です。
php4を使用したいディレクトリの.htaccessに

Action php4-script /cgi-bin/php4
AddHandler php4-script .php .html



と記述する事で以下のディレクトリはphp4として動作させる事ができます。

バーチャルホストごとに切り替える
Apacheのバーチャルホストに

Action php4-script /cgi-bin/php4
AddHandler php4-script .php .html



という文を追加する事でPHP4として動作させる事ができます。
なければPHP5(Apacheのモジュール版の方)で動きます。
たとえば以下のような感じだとそのバーチャルホストのドキュメントルート以下はPHP4として動作します。

<VirtualHost *:80>
   DocumentRoot /home/admin2/
   ServerName hogehoge.com
   Action php4-script /cgi-bin/php4
   AddHandler php4-script .php .html
</VirtualHost>



まとめ

この方法を用いればphp5とphp-4.4.9を任意に切り替えて使用できます。
もちろんphp-5.2.14とphp-5.3,php-4.4.1,php-4.4.9 ・・・ といくつでも使い分け可能です。
動作検証環境ではこういった使い分けのできる環境があると便利です。

しかし問題点としてモジュール版PHPに比べて、動作が多少遅くなり、負荷が掛かる。
大規模なプログラムをCGI版で使用するのはできるだけ避けたいところです。




Home > サーバー技術情報 > Apache2で複数バージョンのPHPを使い分ける

Return to page top

運営会社(株)シーズ WEBアプリケーション、フリーCGI配布「ahref(エーエイチレフ)」 Eビジネスに強いレンタルサーバー「ACサーバー」 大容量ファイル転送サービス「デカメール」