ぱそ子のめも

IT系のメモ。勉強中なので間違ってるかも・・・

前日の閲覧数
176PV
+SHARE
Twitter Facebook RSS

【PHP】複数バージョンのPHPを使う方法

PHP3とPHP4共存させる場合--enable-versioningオプションがあったみたいだけど、PHP4とPHP5、PHP5.XとPHP5.Xでは使えないみたい

PHPを共存させる方法を調べて見たところ、下記の方法がありました

  1. 複数のApacheをインストールしてポートを分けて実行する方法
  2. 複数ののApacheを通常&Proxyを通して使う方法
  3. 1台のApacheでPHPをDSOとCGIで実行する方法
  4. 1台のApacheでhttpd.confのLoadModuleディレクティブを切り替える方法
  5. ソースコード内の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をインクルードするようにする(次の手順)

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}"

#php4の場合は『LoadModule php5_module modules』の部分を変えてください
sudo echo -e "LoadModule php5_module modules/${libphpFile1}" > ${phpswConfPath}/${includeConfFile}
${apache_binPath}/apachectl restart

}

fopt2() {

echo "switch to php-${phpVer2}"

#php4の場合は『LoadModule php5_module modules』の部分を変えてください
sudo echo -e "LoadModule php5_module modules/${libphpFile2}" > ${phpswConfPath}/${includeConfFile}
sudo ${apache_binPath}/apachectl restart

}

fopt3() {

echo "switch to php-${phpVer3}"

#php5の場合は『LoadModule php4_module modules』の部分を変えてください
sudo echo -e "LoadModule php4_module modules/${libphpFile3}" > ${phpswConfPath}/${includeConfFile}
sudo ${apache_binPath}/apachectl restart

}

ver() {

ver=`cat ${phpswConfPath}/${includeConfFile}`

if [[ "$ver" =~ ${libphpFile1}$ ]]
then
echo "php${phpVer1}"
elif [[ "$ver" =~ ${libphpFile2}$ ]]
then
echo "php${phpVer2}"
elif [[ "$ver" =~ ${libphpFile3}$ ]]
then
echo "php${phpVer3}"
fi

}

vhelp() {

echo "Usage :phpsw [option]"
echo " ${opt1} → switch to php-${phpVer1}"
echo " ${opt2} → switch to php-${phpVer2}"
echo " ${opt3} → switch to php-${phpVer3}"
echo " ${veropt}  → show version number of Apache"
exit

}

if [ $# -ne 1 ]
then
vhelp
fi

case "$1" in

${opt1})
fopt1
;;
${opt2})
fopt2
;;
${opt3})
fopt3
;;
${veropt})
ver
;;
*)

vhelp
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


※オプション無しでヘルプを表示

ジャンル:
サーバー
キーワード:
ディレクティブファイル名シェルスクリプト設定ファイルソースコード実行可能ファイルソースファイル

PHP(Linux)」カテゴリの最新記事