— y2sunlight 2020-11-22
筆者のWindowsマシンには、複数のXAMPPと複数のEcpliseがまるでコレクションのようにインストールされています。これまでは手動で切り替えて使っていたのですが、本サイトの投稿をメンテナンスする時に、どうしても一時的に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のコントロールパネルは使用せず、代わりに[コンピュータの管理][サービス]を使用して、サービスの起動/停止を行います。
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
カレントXAMPP内のフォルダをPTAH環境変数に追加します。ここでは以下のフォルダを追加しますが、必要に応じて変更して下さい。
また、D:\usr\xampp7.3.15
などのリンク元フォルダが既にPATHに存在する場合は、これをXAMPPのカレントリンク( D:\usr\xampp
)に置き換えて下さい。
PHP | D:\usr\xampp\php |
---|---|
Apatch | D:\usr\xampp\apache\bin |
MariaDB | D:\usr\xampp\mysql\bin |
デスクトップの[PC]を右クリックして、[システムの詳細設定]を選択し [環境変数…]ボタンを押します。
■ 画面上部の [ユーザの環境変数] の中から [Path] を選択し、[編集…]ボタンを押します。
■ XAMPP関連の必要なPTAHを追加します。
新しくコマンドプロンプトを開いて、PHP、Apache、MariaDBのバージョンをそれぞれ表示して確認して見ましょう。
php -v httpd -v mysql --version
XAMPPのカレントリンクの在るフォルダ( D:\usr
)にXAMPP切り替え用のBATファイル( zampsw.bat
)を作成します。
D:\usr\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
でカレントXAMPPを切り替える為には、コマンドプロンプトを管理者モードで起動する必要があります。
まず、XAMPPのカレントリンクの在るフォルダ( D:\usr
)に移動します:
D:\>cd \usr
zampsw.bat
の使い方は以下の通りです:
xampsw [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
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のバージョンを切り替える事ができるようになります。
D:\usr\xampp\apache\bin
)に移動する。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.
D:\usr\xampp\mysql\bin
)に移動する。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のバージョン切り替えは以下の手順で行うことができます。xampsw
は D:\usr
から実行して下さい。
[コンピュータの管理 > サービスとアプリケーション > サービス]
から:
xampsw X.Y.Z
[コンピュータの管理 > サービスとアプリケーション > サービス]
から:
これらの手順を自動的に行うBATファイルを以下に示します:
D:\usr\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