XAMPPで複数バージョンのPHPを切り替えてApache + MySQL を使う方法 on Windows

## 目標

**XAMPPでPHP7.4.xとPHP5.6.xを切り替えてApacheとMySQL、phpMyAdminを使えるようにする**

## 前提
`PHP`のバージョンが新しい方、もしくは古い方のどちらかで`Apache`と`MySQL`を稼働できていること

## 作業
### バージョンの異なるXAMPPファイルの入手

[ここ](https://sourceforge.net/projects/xampp/files/XAMPP%20Windows/)から欲しいバージョンのPHPが含まれている`XAMPP`の**`zip`**ファイルをダウンロードする。
`PHP`単体でなく、`XAMPP`全体をダウンロードするのは`Apache`や`phpMyAdmin`がそれぞれのPHPバージョンに対応した設定になっているから。
今回の方法では`PHP`のバージョンを切り替えた際、`Apache`と`phpMyAdmin`のファイルや設定もそれに対応したものにする。
特定のファイルを変更するわけじゃないため作業自体や変更自体は少ないが、少し容量に余裕が必要なことに注意。

### 名前の変更
新しいバージョン、または古いバージョンが含まれた`XAMPP`の`zip`ファイルをダウンロードできたら、解凍し、以下の3つのフォルダをデスクトップなどにコピー。

- apache
- phpMyAdmin
- php

そして名前を`(ファイル名) (phpのメジャーバージョン).(phpのマイナーバージョン)`に変更する。
もし、`PHP5.6.x`をダウンロードした場合、コピーしたフォルダは次の名前になる。

- apache5.6
- phpMyAdmin5.6
- php5.6

名前を変更したら、それらをコピーし、現在の`xampp`フォルダに貼り付ける。

その後、`xampp`内の`apache`,`phpMyAdmin`,`php`を貼り付けたのファイル達と同じ方法で名前を変更する。
既存の`PHP`バージョンが`7.4.x`だったら次のようになる。

- apache7.4
- phpMyAdmin7.4
- php7.4

### config.inc.phpの移動

今まで使っていたバージョンの`phpMyAdmin`フォルダから`config.inc.php`を新しく用意したバージョンの`phpMyAdmin`にコピーして貼り付ける。
そうすることで、`PHP`のバージョンが違っても今までと同じように`phpMyAdmin`が使えるようになる。
新しく用意したバージョンの`phpMyAdmin`の`config.inc.php`は`config.origin.inc.php`などに名前を変えて残しておくと良いかもしれない。

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

シンボリックリンクとはショートカットのようなもの。
`php7.4`から`php`というシンボリックリンクを作成したら、システムや他のファイルは`php`というシンボリックリンクを参照して、それに指定された`php7.4`がその中身となる。
正直、使うたびに`php7.4`を`php`に変更するような作業をすればいいが、手間なのでシンボリックリンクを作成する。

今回は`PHP`のバージョンが`5.6`のシンボリックリンクを作成する。
シンボリックリンクはコマンドプロントを開いて、それぞれ次のコマンドで実行できる。

```
$ mklink /D c:\xampp\apache C:\xampp\apache5.6
$ mklink /D c:\xampp\phpMyAdmin C:\xampp\phpMyAdmin5.6
$ mklink /D c:\xampp\php C:\xampp\php5.6
```

### バッチファイル(スクリプト)の作成

「コマンドを毎回入力するよりも名前を毎回変えた方が楽じゃん」
それは否定しないが、コマンドの紹介をしたのは上記のコマンドを含めたバッチファイル(スクリプト)を作成すれば、もっと楽にできる。

ということで、下記のようなバッチファイル(スクリプト)を作成し、`xampp`下などの使いやすいところに置く。
使い方はエクスプローラーから直接実行するか、コマンドプロントから`change_php.bat`を置いたところまで移動し、`change_php.bat`を実行する。

```change_php.bat
@echo off
 
echo.
echo 使いたいPHPのバージョンを選択してください。
echo.
echo 現在のPHPバージョン:
echo.
php -v
echo.
echo 1: PHP 5.6
echo 2: PHP 7.4
echo C: Cancel
echo.
 
choice /c 12C /M "使いたいPHPのバージョン."
if %errorlevel% equ 1 goto PHP5_6
if %errorlevel% equ 2 goto PHP7_4
goto OnExit
 
:PHP5_6
rmdir C:\xampp\apache
mklink /D C:\xampp\apache C:\xampp\apache-5.6
rmdir C:\xampp\phpMyAdmin
mklink /D C:\xampp\phpMyAdmin C:\xampp\phpMyAdmin-5.6
rmdir C:\xampp\php
mklink /D C:\xampp\php C:\xampp\php-5.6
goto OnExit
 
:PHP7_4
rmdir C:\xampp\apache
mklink /D C:\xampp\apache C:\xampp\apache-7.4
rmdir C:\xampp\phpMyAdmin
mklink /D C:\xampp\phpMyAdmin C:\xampp\phpMyAdmin-7.4
rmdir C:\xampp\php
mklink /D C:\xampp\php C:\xampp\php-7.4
goto OnExit
 
:OnExit
```

コマンドプロントの文字コードが`ANSI`なので、名前を付けて保存する際に`ANSI`を指定しないと動作できなくなるので注意。
実際に動かすとこのようになる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/218398/1060f9eb-e717-dd01-ea2a-e4447f810327.png)

### 動作確認
`xampp`フォルダの`xampp-control.exe`を開き、`Apache`と`MySQL`の`Admin`ボタンをクリックし、新しく用意したバージョンの`PHPInfo`で用意したバージョンの`PHP`になっているのと`phpMyAdmin`に接続できればOK。

- [PHPInfo](http://localhost/dashboard/phpinfo.php)
- [phpMyAdmin](http://localhost/phpmyadmin/)

## 参考資料

- [SOURCEFORGET](https://sourceforge.net)
- [XAMPPで複数のPHPを切り替える (プロジェクト毎にPHPを切り替えてみる)](https://www.m-kobayashi.org/software/tools/Xampp_PHP_VUP.html)
- [シンボリックリンク（ソフトリンク）とは - IT用語辞典 e-Words](http://e-words.jp/w/%E3%82%B7%E3%83%B3%E3%83%9C%E3%83%AA%E3%83%83%E3%82%AF%E3%83%AA%E3%83%B3%E3%82%AF.html#:~:text=%E3%82%B7%E3%83%B3%E3%83%9C%E3%83%AA%E3%83%83%E3%82%AF%E3%83%AA%E3%83%B3%E3%82%AF%E3%81%A8%E3%81%AF%E3%80%81%E3%82%AA%E3%83%9A%E3%83%AC%E3%83%BC%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0,%E3%81%A7%E3%81%8D%E3%82%8B%E3%82%88%E3%81%86%E3%81%AB%E3%81%99%E3%82%8B%E4%BB%95%E7%B5%84%E3%81%BF%E3%80%82)