- 投稿日2010-01-13 (水)
- 更新日2010-09-22 (水) 21:14
- サーバー技術情報
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版で使用するのはできるだけ避けたいところです。
- 次の記事→ proftpでアクセス制限
- 前の記事→ 2台だけで負荷分散+冗長化を検証( Pound + keepalived )
コメント:0
トラックバック:3
- この記事のトラックバックURL
- http://www.ahref.org/tech/server/server-tips/667.html/trackback
- この記事へのリンク
- エーエイチレフ linuxサーバー技術情報 からの記事 Apache2で複数バージョンのPHPを使い分ける
- pingback from polidog lab+ | 続・CentOS5.4でPHP4.3.3を入れる 10-05-04 (火) 2:52
-
[...] 参考 phpの異なるバージョンを ドメイン毎に管理したい。 Apache2で複数バージョンのPHPを使い分ける [...]
- pingback from PHPのCGIモードとモジュール版の共存Toro-Unit 10-08-09 (月) 23:47
-
[...] http://www.ahref.org/tech/server/server-tips/667.html [...]
- pingback from phpバージョン切り替え メモ – NoneBlog 12-01-23 (月) 9:30
-
[...] ■参考にさせて頂きましたURL http://www.ahref.org/tech/server/server-tips/667.html http://sakura.off-soft.net/centos/php_cgi_module_exchange.html http://blog.bz2.jp/archives/2006/02/php-3.html [...]















関連記事