目次

XAMPP 複数バージョンの利用

y2sunlight 2020-11-22

XAMPP に戻る

筆者のWindowsマシンには、複数のXAMPPと複数のEcpliseがまるでコレクションのようにインストールされています。これまでは手動で切り替えて使っていたのですが、本サイトの投稿をメンテナンスする時に、どうしても一時的にXAMPPを切り替えたい場合も多く、これを機会にもう少し便利に切り替える方法を模索したい思います。

本章で対象とするXAMPPのバージョン


概要

本編では以下のルールでXAMPPをインストールします:

D:\usr\xampp{メジャーバージョン}.{マイナーバージョン}.{パッチバージョン}

例えば、Version 7.2.22と7.3.15のXAMPPは、それぞれ以下のフォルダにインストールします。

D:\usr\xampp7.2.22
D:\usr\xampp7.3.15

ここで、以下のリンクを XAMPP のカレントリンクと定義し、カレントリンクによって利用しているXAMPPを本章では「カレントXAMPP」と呼びます。

D:\usr\xampp

このカレントリンクを切り替えることにより XAMPP の複数バージョンを利用します。

複数バージョンの利用方針

XAMPPのカレントリンクは以下で利用します。

EclipseなどもPHPを利用しますが、PATH環境変数とサービス登録時のパス以外は、リンク元であるXAMPPを xamppX.X.X のようにして直接利用する事にします。即ち、開発環境の中心となるEclipseなどのIDEで利用しているPHPの環境に合わせてXAMPPを切り替えて使用する事にします。

余談になりますが、現在のXAMPPとPHPのバージョンは同じであり(PHPとXAMPPのバージョンは、5.5.33から同じです)、利用するPHPのバージョンに合わせてXAMPPを切り替えることが自然の流れのような気がします。

本章で採用した方法の評価については、筆者もまだ出来ていません。この方法で何年か運用して見て、その結果はここに掲載する予定です。ご意見・ご感想のある方は、是非ともコメント頂ければ幸いです。


サービス登録の解除

既にXAMPP(Apatch/MariaDBなど)のサービスが登録されている場合、一旦、そのサービス登録を解除しておく必要があります。現在稼働しているXAMPPのコントロールパネル( xampp-control.exe )を管理者権限で起動します。

{XAMPP Install Folder}/xampp-control.exe

■ ApacheとMariaDBの[Stop]を押してサービスを停止します。
■ ApacheとMariaDBの[Service]のチェック(緑の×印)をクリックします。
(チェックが赤の時は不要です)

■ サービス登録が解除(チェックが赤の×印)されている事を確認して下さい。

注意
これ以降、XAMPPのコントロールパネルは使用せず、代わりに[コンピュータの管理][サービス]を使用して、サービスの起動/停止を行います。


XAMPP カレントリンクの作成

Winodwsのシンボリックリンクにはソフトウェアリンクとジャンクションの2種類がありますが、誤ってリンクを切り替えないように、管理者権限の必要なソフトウェアリンクを採用します。シンボリックリンクに関する詳細は本編の「Apatch2.4 シンボリックリンク」を参照して下さい。

以下では、シンボリックリンクを作成し、PATH環境変数にそのパスを設定します。また、シンボリックリンクの切り替えを簡単にするために、切り替え用のBATファイルを作成します。


シンボリックリンクの作成

現在稼働中のXAMPP( ここでは xampp7.3.15 )をXAMPPのカレントリンクに設定します。

D:\>mklink /D D:\usr\xampp D:\usr\xampp7.3.15

dirコマンドで確認してみましょう:

D:\>dir \usr\xampp*
 
2020/11/19  14:43    <SYMLINKD>     xampp [D:\usr\xampp7.3.15]
2014/07/29  11:19    <DIR>          xampp1.8.2
2019/10/07  22:22    <DIR>          xampp7.2.22
2018/08/21  14:10    <DIR>          xampp7.2.8
2020/11/05  12:13    <DIR>          xampp7.3.15


PATH環境変数の書き換え

カレントXAMPP内のフォルダをPTAH環境変数に追加します。ここでは以下のフォルダを追加しますが、必要に応じて変更して下さい。 また、D:\usr\xampp7.3.15 などのリンク元フォルダが既にPATHに存在する場合は、これをXAMPPのカレントリンク( D:\usr\xampp )に置き換えて下さい。

PHPD:\usr\xampp\php
ApatchD:\usr\xampp\apache\bin
MariaDBD:\usr\xampp\mysql\bin

デスクトップの[PC]を右クリックして、[システムの詳細設定]を選択し [環境変数…]ボタンを押します。

■ 画面上部の [ユーザの環境変数] の中から [Path] を選択し、[編集…]ボタンを押します。

■ XAMPP関連の必要なPTAHを追加します。

PATHの確認

新しくコマンドプロンプトを開いて、PHP、Apache、MariaDBのバージョンをそれぞれ表示して確認して見ましょう。

php -v
httpd -v
mysql --version


リンボリックリンクの切り替え

XAMPPのカレントリンクの在るフォルダ( D:\usr )にXAMPP切り替え用のBATファイル( zampsw.bat )を作成します。

D:\usr\zampsw.bat

zampsw.bat
@echo off
 
set xamp_ver=%1
set xamp_link=xampp
set xamp_target=%xamp_link%%xamp_ver%
 
echo;
if ""%xamp_ver%""=="""" (
    echo 使い方: %0 [XAMPPのバージョン番号]
    echo 実行例: %0 1.2.3
    goto END
)
 
if not exist %xamp_target% (
    echo Error: %xamp_target% not found
    goto END
)
 
if exist %xamp_link% (
   echo remove %xamp_link%
   rmdir %xamp_link%
)
 
echo link %xamp_target% to %xamp_link%
mklink /D %xamp_link%  %xamp_target%
goto END
 
:END
 
echo;
echo 【 現在のXAMPP情報 】
echo;
dir %xamp_link%*|findstr "^[0-9]"

zampsw.bat の使い方

zampsw.bat でカレントXAMPPを切り替える為には、コマンドプロンプトを管理者モードで起動する必要があります。

まず、XAMPPのカレントリンクの在るフォルダ( D:\usr )に移動します:

D:\>cd \usr

zampsw.bat の使い方は以下の通りです:

xampsw [XAMPPのバージョン番号]

[XAMPPのバージョン番号]を省略すると、現在の状態が表示されます。

カレントXAMPPの確認

D:\usr>xampsw
 
使い方: xampsw [XAMPPのバージョン番号]
実行例: xampsw 1.2.3
 
【 現在のXAMPP情報 】
 
2020/11/21  17:30    <SYMLINKD>     xampp [xampp7.2.22]
2014/07/29  11:19    <DIR>          xampp1.8.2
2019/10/07  22:22    <DIR>          xampp7.2.22
2018/08/21  14:10    <DIR>          xampp7.2.8
2020/11/05  12:13    <DIR>          xampp7.3.15

カレントXAMPPの切り替え

D:\usr>xampsw 7.3.15
 
remove xampp
link xampp7.3.15 to xampp
xampp <<===>> xampp7.3.15 のシンボリック リンクが作成されました
 
【 現在のXAMPP情報 】
 
2020/11/21  23:03    <SYMLINKD>     xampp [xampp7.3.15]
2014/07/29  11:19    <DIR>          xampp1.8.2
2019/10/07  22:22    <DIR>          xampp7.2.22
2018/08/21  14:10    <DIR>          xampp7.2.8
2020/11/05  12:13    <DIR>          xampp7.3.15


サービスの登録

XAMPPのカレントリンクパス( D:\usr\xampp )を使ってサービスを登録します。これによって、サービスを再起動するだけでるだけApacheやMaridDBのバージョンを切り替える事ができるようになります。

Apacheのサービス登録

  1. コマンドプロンプトを管理者権限で起動する。
  2. カレントXAMPPのApacheのインストールフォルダ( D:\usr\xampp\apache\bin )に移動する。
  3. 以下のコマンドを実行する。
httpd -k install -n "Apache2.4" -f "D:/usr/xampp/apache/conf/httpd.conf"
ここで “Apache2.4” はサービス名なので他の適切な名前に変更することが出来ます。

実行例

D:\usr\xampp\apache\bin>httpd -k install -n "Apache2.4" -f "D:/usr/xampp/apache/conf/httpd.conf"
 
Installing the 'Apache2.4' service
The 'Apache2.4' service is successfully installed.
Testing httpd.conf....
Errors reported here must be corrected before the service can be started.

Apacheの起動/停止/再起動は、[コンピュータの管理 > サービスとアプリケーション > サービス > Apache2.4] から、または以下のコマンドで行うことができます。

net start Apache2.4
net stop Apache2.4

また、Apacheのサービス登録を削除するには以下のコマンドを実行します。

httpd -k uninstall -n "Apache2.4"

実行例

D:\usr\xampp\apache\bin>httpd -k uninstall -n "Apache2.4"
 
Removing the 'Apache2.4' service
The 'Apache2.4' service has been removed successfully.


MariaDBのサービス登録

  1. コマンドプロンプトを管理者権限で起動する。
  2. カレントXAMPPのMariaDBのインストールフォルダ( D:\usr\xampp\mysql\bin )に移動する。
  3. 以下のコマンドを実行する。
mysqld --install "MariaDB10" --defaults-file="D:/usr/xampp/mysql/bin/my.ini"

実行例

D:\usr\xampp\mysql\bin>mysqld --install "MariaDB10" --defaults-file="D:/usr/xampp/mysql/bin/my.ini"
 
Service successfully installed.

MariaDBの起動/停止/再起動は、[コンピュータの管理 > サービスとアプリケーション > サービス > MariaDB10]から、または以下のコマンドで行うことができます。

net start MariaDB10
net stop MariaDB10

また、MariaDBのサービス登録を削除するには以下のコマンドを実行します。

mysqld --remove "MariaDB10"

実行例

D:\usr\xampp\mysql\bin>mysqld --remove "MariaDB10"
Service successfully removed.


バージョン切り替えの手順

最終的に、XAMPPのバージョン切り替えは以下の手順で行うことができます。xampswD:\usr から実行して下さい。

  1. [コンピュータの管理 > サービスとアプリケーション > サービス]から:
    • Apacheを停止します。
    • Mariaを停止します。

  2. xampswを使ってXAMPPのバージョン切り替えます:
    • xampsw X.Y.Z

  3. [コンピュータの管理 > サービスとアプリケーション > サービス]から:
    • Apacheを開始します。
    • Mariaを開始します。

これらの手順を自動的に行うBATファイルを以下に示します:

最終版の zampsw.bat

D:\usr\zampsw.bat

zampsw.bat
@echo off
setlocal EnableDelayedExpansion
 
rem ----------------------------------------------
rem 設定
rem ----------------------------------------------
 
rem サービス名を設定
set apache=Apache2.4
set mysql=MariaDB10
 
rem XAMPPのバージョンを設定
set xamp_ver=%1
set xamp_link=xampp
set xamp_target=%xamp_link%%xamp_ver%
 
rem エラーチェック
echo;
if ""%xamp_ver%""=="""" (
    echo 使い方: %0 [XAMPPのバージョン番号]
    echo 実行例: %0 1.2.3
    goto END
)
 
whoami /priv | find "SeLoadDriverPrivilege" > nul
if !ERRORLEVEL! neq 0 (
    echo Error: 管理者権限で実行して下さい
    goto END
)
 
if not exist %xamp_target% (
    echo Error: "%xamp_target%" が見つかりません
    goto END
)
 
rem ----------------------------------------------
rem サービスの停止
rem ----------------------------------------------
 
if not ""%apache%""=="""" (
    sc query "%apache%" | findstr STATE | findstr RUNNING > null
    if !ERRORLEVEL! equ 0 (
        echo stop "%apache%"
        net stop "%apache%"
    )
)
 
if not ""%mysql%""=="""" (
    sc query "%mysql%" | findstr STATE | findstr RUNNING > null
    if !ERRORLEVEL! equ 0 (
        echo stop "%mysql%"
        net stop "%mysql%"
    )
)
 
rem ----------------------------------------------
rem XAMPPリンクの切り替え
rem ----------------------------------------------
 
if exist %xamp_link% (
   echo remove %xamp_link%
   rmdir %xamp_link%
)
 
echo link %xamp_target% to %xamp_link%
mklink /D %xamp_link%  %xamp_target%
echo;
 
rem ----------------------------------------------
rem サービスの開始
rem ----------------------------------------------
 
if not ""%apache%""=="""" (
    sc query "%apache%" | findstr STATE | findstr RUNNING > null
    if !ERRORLEVEL! neq 0 (
        echo start "%apache%"
        net start "%apache%"
    )
)
 
if not ""%mysql%""=="""" (
    sc query "%mysql%" | findstr STATE | findstr RUNNING > null
    if !ERRORLEVEL! neq 0 (
        echo start "%mysql%"
        net start "%mysql%"
    )
)
goto END
 
:END
rem ----------------------------------------------
rem 現在のXAMPP情報の表示
rem ----------------------------------------------
 
echo;
echo 【 現在のXAMPP情報 】
echo;
dir %xamp_link%*|findstr "^[0-9]"

このBATファイルを使用すれば、単に zampsw X.Y.Z とすればXAMPPのバージョンが切り替わります。

サービス名を指定するには以下の部分を変更して下さい。この部分をコメントアウトするか削除すればサービスの停止/開始は行いません。

rem サービス名を設定
set apache=Apache2.4
set mysql=MariaDB10

また、このバッチファイルにPATHを通してどこからでも起動できるようにした場合は、以下のように xamp_link を絶対パスで指定して下さい。

set xamp_link=D:\usr\xampp