XAMPPのPHPをなるべく簡単にバージョンを切り替える方法
WindowsのXAMPPでPHPによる開発を行う際、開発する環境とリリースする環境をなるべく近づけて開発を行ったり、検証を行いたいということがあると思います。
そこで今回は、XAMPPのPHPのバージョンを、なるべく簡単に切り替えられる方法をご紹介します。
事前準備
PHPのバージョンを用意
PHPの各バージョンは二つの方法で入手することができます。
一つはPHP公式のアーカイブページ、もう一つSourceForge.netのXAMPPが保管されているページです。
PHP公式のアーカイブページは時期によって異なりますが、この記事を書いている時はPHPのバージョンで5.2.6から最新までが保管されています。
SourceForge.netではXAMMPPのバージョンで0.9(PHPのバージョンは4.3.3)から最新までが保管されています。
公式のアーカイブは5.2.6からのバージョンが保管されているのに対し、SourceForge.netは4.3.3からのバージョンが保管されています。
SourceForge.netのほうはXAMPPの環境に最適化された状態のものが入っていますが、XAMPPのバージョンによって含まれているPHPのバージョンが飛び飛びになっています。
使用するPHPのバージョンをアーカイブ(ZIP)ファイルでダウンロードします。
エクスプローラーでXAMPPがインストールされているフォルダへ移動し(初期はC:¥xampp)、新規フォルダを作成します。
フォルダ名は何でもよいですが、ここでは分かりやすく"php5.6.40"のように"php"にバージョン番号を繋げた名前にします。
作成したフォルダを開き、先ほどダウンロードしたアーカイブファイルを解凍し展開します。
なお、SourceForge.netのXAMPPの場合は、一度アーカイブファイルを開き、その中にあるphpという名前のフォルダをさらに開いた後のファイル群を、作成したフォルダに解凍し展開します。
XAMPPがインストールされているフォルダへ移動し、phpという名前のフォルダの名前を変更します。
これでPHPのバージョンごとの設置は完了です。
php.iniを変更していたりする場合は、新しく設置したphp.iniをあわせて変更しておいてください。
メジャーバージョンごとのApache設定
Apache側のPHPの設定は、PHPのメジャーバージョンごとに設定が異なるため、XAMPPに予め含まれていたPHPのバージョンとメジャーバージョンが異なるようであれば、その設定を用意します。
まず、XAMPPがインストールされているフォルダにあるapache\conf\extra\httpd-xampp.confを複製します。
XAMPPに予め含まれていたバージョンが7系であれば、複製元のファイル名を"httpd-xampp-php7.conf"のようにし、新たに設置したPHPのバージョンが5系であれば、複製したファイル名を"httpd-xampp-php5.conf"のようにします。
複製した設定ファイルを開き、該当箇所を書き換えます。
例えばもともと7系で5系を追加した場合、"php7"と書かれている箇所があったら、その部分を"php5"に書き換えます。
現在のPHPを指定
コマンドプロンプトなどコマンドラインツールを<u>管理者権限で</u>起動します。
cd
コマンドを実行し、XAMPPがインストールされているフォルダへ移動します。
cd C:\xampp
mklink
コマンドをmklink /D シンボリックリンク名 参照元のパス
という入力で実行し、XAMPPの初期で導入されていたPHPのバージョンのシンボリックリンクを作成します。
mklink /D php C:\xampp\php7.1.31
cd
コマンドを実行し、httpd-xampp.confがあるフォルダへ移動します。
cd apache\conf\extra
mklink
コマンド実行し、先ほど作成したシンボリックリンクのPHPのバージョンにあわせて、メジャーバージョンのhttpd-xampp.confのシンボリックリンクを作成します。
mklink httpd-xampp.conf C:\xampp\apache\conf\extra\httpd-xampp-php7.conf
cd
コマンドを実行し、apacheフォルダへ移動します。
cd ..\..
bin\httpd.exe
コマンドを実行しApacheを再起動します。
bin\httpd.exe -k restart
これで現在のXAMPPの状態を整えました。
次の画像はこれらの内容を実行したコマンドの例です。
バージョンを切り替え
コマンドプロンプトなどコマンドラインツールを<u>管理者権限で</u>起動します。
cd
コマンドを実行し、XAMPPがインストールされているフォルダへ移動します。
cd C:\xampp
rmdir
コマンドを実行し、phpフォルダのリンボリックリンクを削除します。
rmdir /s /q php
mklink
コマンドを実行し、切り替えたいPHPのバージョンのシンボリックリンクを作成します。
mklink /D php C:\xampp\php5.6.40
cd
コマンドを実行し、httpd-xampp.confがあるフォルダへ移動します。
cd apache\conf\extra
del
コマンドを実行し、httpd-xampp.confのリンボリックリンクを削除します。
del /q httpd-xampp.conf
mklink
コマンド実行し、先ほど作成したシンボリックリンクのPHPのバージョンにあわせて、メジャーバージョンのhttpd-xampp.confのシンボリックリンクを作成します。
mklink httpd-xampp.conf C:\xampp\apache\conf\extra\httpd-xampp-php5.conf
cd
コマンドを実行し、apacheフォルダへ移動します。
cd ..\..
bin\httpd.exe
コマンドを実行しApacheを再起動します。
bin\httpd.exe -k restart
切り替わったかどうか、php
コマンドを実行して確認します。
-v
オプションを付けることでPHPの現在のバージョンを確認できます。
php -v
これでPHPのバージョンの切り替えが完了しました。
次の画像はこれらの内容を実行したコマンドの例です。
切り替えをバッチファイルにまとめる
バッチファイルを作成しておくと、バージョンの切り替えを少しスムーズに行うことができます。
次のコードはコマンドライン経由かバッチファイルを直接起動することで、指定したバージョンを切り替えることができるバッチファイルの例です。
@echo off
set v=
rem 引数によるバージョン指定
call :versionMatches %1
rem 指定のバージョンなら次のステップへ
if %isMatch%==true (
set v=%1
goto step1
)
rem 質問メッセージ
set /p q="切り替えるバージョンを入力してください。"
rem 入力によるバージョン指定
call :versionMatches %q%
rem 指定のバージョンなら次のステップへ
if %isMatch%==true (
set v=%q%
goto step1
)
rem === STEP1:エラーチェック ===
:step1
set isMatch==false
rem 空白じゃなく指定のバージョンが見つかるか判定
if not "%v%"=="" if exist "C:\xampp\php%v%" set isMatch=true
rem 見つかったら次のステップへ
if %isMatch%==true goto step2
rem 見つからなければエラーメッセージを表示して処理を終了
echo 入力されたバージョンが見つかりませんでした。
goto end
rem === STEP2:切り替え処理 ===
:step2
rem メジャーバージョンを取得
set major_v=%v:~0,1%
rem XAMPPのインストールディレクトリへ移動
cd /d C:\xampp
rem phpディレクトリを削除
rmdir /s /q php
rem バージョンにあわせたphpディレクトリのジャンクションリンクを作成
mklink /J php C:\xampp\php%v%
rem 設定ディレクトリへ移動
cd apache\conf\extra
rem 設定ファイルを削除
del /q httpd-xampp.conf
rem ApacheのXAMPP用設定ファイルをPHPのメジャーバージョンにあわせてシンボリックリンクを作成
mklink httpd-xampp.conf C:\xampp\apache\conf\extra\httpd-xampp-php%major_v%.conf
rem apacheディレクトリへ移動
cd ..\..
rem Apacheを再起動
start bin\httpd.exe -k restart
goto end
rem === バージョンが一致するか判定 ===
:versionMatches
set isMatch=false
if "%1"=="5.6.40" set isMatch=true
if "%1"=="7.1.31" set isMatch=true
exit /b
rem === 処理を終了 ===
:end
pause
exit /b
このコードをエディタなどで記述し、switch-php-version.batのようにバッチファイルとして保存します。
このバッチファイルを使用して切り替えるには二つ方法があり、一つはコマンドラインでswitch-php-version.bat 5.6.40
と引数で切り替えたいバージョンを指定することで、切り替えることができます。
もう一つはバッチファイルを直接起動すると、"切り替えるバージョンを入力してください。"とメッセージが表示されるので、切り替えたいバージョンを入力し、Enterキーを押すと切り替えることができます。
なお、どちらのバッチファイルで切り替える方法も、管理者権限で実行する必要があります。
Discussion