【PHP】複数バージョンのPHPを使う方法
2010年10月24日
カテゴリー: PHP(Linux)
PHPを共存させる方法を調べて見たところ、下記の方法がありました
- 複数のApacheをインストールしてポートを分けて実行する方法
- 複数ののApacheを通常&Proxyを通して使う方法
- 1台のApacheでPHPをDSOとCGIで実行する方法
- 1台のApacheでhttpd.confのLoadModuleディレクティブを切り替える方法
- ソースコード内のMIMEタイプ文字列を直接変更してインストールする方法
4と5の方法が気になる・・・
ソースコード内のMIMEタイプ文字列を直接変更してインストールする方法をやってみたけど、動作はしてるようだけど、PHPファイルが認識してくれませんでした・・・
・・・ので、1台のApacheでhttpd.confのLoadModuleディレクティブを書き換える方法を使って見ようと思います
複数のPHPをインストールし、LoadModuleディレクティブを書き換えるスクリプトを使って切り替えをします
他の方法と違って、同時に使用することはできませんが構築の検証する時に便利です
Apache2.2.16 1台でphp5.3.3とphp5.2.14とphp4.4.9をインストールします
●構築環境
| OS | fedora13 |
| php | php5.3.3 php5.2.14 php4.4.9 |
| Webサーバ | /usr/local/httpd/Apache2.2.16 |
| php.iniのパス | /usr/local/php-X.X.X/lib |
| Apacheのphpモジュール | /usr/local/httpd/modules/ php5.3.3→libphp53.so php5.2.14→libphp52.so php4.4.9→libphp4.so |
| phpを切り替えるスクリプトのパス | /bin/phpsw |
| インクルードするApacheの設定ファイル | /usr/local/httpd/conf/phpsw.conf |
| ソースファイルのパス | /usr/local/src |
インストールする順番は関係ないですが下記を気を付けてください
configureで--prefixオプションでインストール先を設定する
php.iniをデフォルトの場所(--PREFIXオプションのパス/lib)以外に置く場合は--with-config-file-path=PATHをつける
php5.Xとphp5.X(php4どうしも同じ)をインストールする場合はApacheのphpモジュールの名前を変更する
(2回目のインストール時に上書きされてしまうため)
●php5.3.3のインストール
1. php5.3.3のコンパイル&インストール(詳細は省略)
モジュールは必要な物をインストールして下さい
| # cd /usr/local/src # tar xvfz php-5.3.3.tar.gz # cd php-5.3.3 # ./configure --prefix=/usr/local/php-5.3.3 --with-apxs2=/usr/local/httpd-2.2.16/bin/apxs --enable-mbstring --with-gd --with-mysql=/usr/local/mysql-5.1.50 --with-mysqli --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-jpeg-dir --with-iconv #make #make install |
2. php.iniの雛形のコピー(編集済みのをコピーした方が良いかも)
| # cp /usr/local/src/php-5.3.3/php.ini-development /usr/local/php-5.3.3/lib/php.ini |
3. 作成されたApacheのphpモジュールをリネームする(ここではlibphp53にする)
| # mv /usr/local/httpd/modules/libphp5.so /usr/local/httpd/modules/libphp53.so |
●php5.2.14のインストール
4. php5.2.14のコンパイル&インストール(詳細は省略)
モジュールは必要な物をインストールして下さい
| # cd /usr/local/src # tar xvfz php-5.2.14.tar.gz # cd php-5.2.14 # ./configure --prefix=/usr/local/php-5.2.14 --with-apxs2=/usr/local/httpd-2.2.16/bin/apxs --enable-mbstring --with-gd --with-mysql=/usr/local/mysql-5.1.50 --with-mysqli --with-mysqli=/usr/local/mysql-5.1.50/bin/mysql_config --with-jpeg-dir --with-iconv #make #make install |
5. php.iniの雛形のコピー(編集済みのをコピーした方が良いかも)
| # cp /usr/local/src/php-5.2.14/php.ini-dist /usr/local/php-5.2.14/lib/php.ini |
6. 作成されたApacheのphpモジュールをリネームする(ここではlibphp52にする)
| # mv /usr/local/httpd/modules/libphp5.so /usr/local/httpd/modules/libphp52.so |
●php4.4.9のインストール
7. php4.4.9のコンパイル&インストール(詳細は省略)
モジュールは必要な物をインストールして下さい
| # cd /usr/local/src # tar xvfz php-4.4.9.tar.gz # cd php-4.4.9 # ./configure --prefix=/usr/local/php-4.4.9 --with-apxs2=/usr/local/httpd-2.2.16/bin/apxs --with-iconv --enable-mbstring --with-gd --with-jpeg-dir --with-png-dir --with-zlib-dir --with-gd-dir #make #make install |
8. php.iniの雛形のコピー(編集済みのをコピーした方が良いかも)
| # cp /usr/local/src/php-4.4.9/php.ini-dist /usr/local/php-4.4.9/lib/php.ini |
apache内のmodules/libphp52.soとlibphp53.soとlibphp4.soができたので
httpd.confのLoadModuleディレクティブを使用するバージョンによって書き換えればそのバージョンのPHPを使えるようになる
| 5.2.14の場合 LoadModule php5_module modules/libphp52.so 5.3.3の場合 LoadModule php5_module modules/libphp53.so 4.4.9の場合 LoadModule php4_module modules/libphp4.so |
●phpを切替えるスクリプトの作成
一々LoadModuleディレクティブの書き換え&restartするのは面倒なのでコマンドで切替えが出来るようにします
◎シェルスクリプト:phpswの内容(変数がデフォルトの場合)◎
・/usr/local/httpd-2.2.16/conf直下にphpsw.confと言う設定ファイルを作成し、apacheを再起動する
・phpsw.confは起動したいPHPバージョンのLoadModuleディレクティブが記載される
・httpd.confからphpsw.confをインクルードするようにする(次の手順)
| php5.3.3の場合 LoadModule php5_module modules/libphp53.so php5.2.14の場合 LoadModule php5_module modules/libphp52.so php4.4.9の場合 LoadModule php4_module modules/libphp4.so |
8. 下記のシェルスクリプトをphpswで保存にする(場所は/binや/usr/binなど好きな場所で)
※環境によって改変してください
| #!/bin/sh #設定------------------------------------------------------------------------- #apachectlのディレクトリのパス apache_binPath="/usr/local/httpd-2.2.16/bin" #インクルードするconfファイルの名前 includeConfFile="phpsw.conf" #phpsw.confを置くディレクトリのパス phpswConfPath="/usr/local/httpd-2.2.16/conf" #使用しているバージョンを確認するコマンドのオプション名 veropt="-v" #*********1つ目のphpの設定********* #コマンドのオプション名1 opt1=52 #phpのバージョン名1 phpVer1="5.2.14" #libphp5.soをリネームしたファイル名1 libphpFile1="libphp52.so" #*********2つ目のphpの設定********* #コマンドのオプション名2 opt2=53 #phpのバージョン名2 phpVer2="5.3.3" #libphp5.soをリネームしたファイル名2 libphpFile2="libphp53.so" #*********3つ目のphpの設定********* #コマンドのオプション名3 opt3=4 #phpのバージョン名2 phpVer3="4.4.9" #libphp5.soをリネームしたファイル名2 libphpFile3="libphp4.so" #---------------------------------------------------------------------------- fopt1() { echo "switch to php-${phpVer1}" fopt2() { echo "switch to php-${phpVer2}" fopt3() { echo "switch to php-${phpVer3}" ver() { ver=`cat ${phpswConfPath}/${includeConfFile}` vhelp() { echo "Usage :phpsw [option]" if [ $# -ne 1 ] then vhelp fi case "$1" in ${opt1}) esac |
9. 所有者をrootにする
| # chown root /bin/phpsw |
10. 実行可能ファイルにする
| # chmod +x /bin/phpsw |
●httpd.conf/php.iniの編集
11. httpd.confを編集する(phpの設定箇所については省略)
| 下記を削除 LoadModule php5_module modules/libphp5.so LoadModule php4_module modules/libphp4.so phpsw.confをインクルードする設定。下記を追記($phpswConfPathと同じパスにする) Include conf/phpsw.conf PHPIniDirディレクティブを記載してる場合は削除する |
12. php.iniの設定も行う(設定箇所については省略)
13. Apacheを再起動する
| # /usr/local/httpd/bin/apachectl restart |
●コマンドの操作
5.3.3を起動する
| # phpsw 53 |
5.2.14を起動する
| # phpsw 52 |
4.4.9を起動する
| # phpsw 4 |
現在起動しているバージョンを確認する
(phpsw.confの中身を見て$veroptを表示させているだけなので注意)
| # phpsw -v |
※オプション無しでヘルプを表示





