XAMPPでPHPのバージョンを複数持つ

XAMPPでPHPのバージョンを複数持つ方法を調べて試行錯誤した結果うまくいったので備忘録として残しておく。

# 準備
[XAMPPのサイト](https://www.apachefriends.org/jp/index.html)からポータブル版（exeではなくzipがいい）の欲しいPHPのバージョンが入っているデータを持ってくる。
今回は7.1と8.1で進めていく。

# 実践
1. 持ってきたデータをどっちかひとつ解凍する。どっちでもいいがここでは便宜上7.1を解凍する。解凍したのはxamppを運用したい場所（C直下とか）に置く。ここでは便宜上Cドライブの直下に置く。

2. 移動したxamppフォルダの中に「PHP」「Apache」「phpMyAdmin」というフォルダがあるので、それをそれぞれ「PHP71」「Apache71」「phpMyAdmin71」という名前にリネームする
3. 次に8.1を解凍する。その中にもやっぱり「PHP」「Apache」「phpMyAdmin」というフォルダがあるのでそれらをそれぞれ「PHP81」「Apache81」「phpMyAdmin81」という名前にする
4. 「PHP81」「Apache81」「phpMyAdmin81」のフォルダを、最初に解凍してC直下などに移動したxamppフォルダの中（PHP71とかApache71が入っているフォルダだ）の中に入れる
4. `C:\xampp\apache71\conf\extra` の中にある`httpd-xampp.conf`を`httpd-xampp71.conf`にリネームし、`C:\xampp\apache81\conf\extra`の中にコピーする
4. `C:\xampp\apache81\conf\extra` の中にある`httpd-xampp.conf`を`httpd-xampp81.conf`にリネームし、`C:\xampp\apache71\conf\extra`の中にコピーする
ややこしいが`C:\xampp\apache71\conf\extra`の中にも`C:\xampp\apache81\conf\extra`の中にも`httpd-xampp71.conf`と`httpd-xampp81.conf`が両方存在していればいい
5. なにかしらのエディタをひらき（Windowsのメモ帳でいい）、下記コードをANSIでbat形式で保存する。ファイル名は何でもいいがここでは便宜上「#change_php.bat」とする。なんで頭に#がついているのかというとファイル名順に並び替えたとき上の方に来るからだ。いらなければ外していい
```dat:#change_php.bat
@echo off
echo.
echo phpのバージョンを確認します。
echo.
php -v
echo.
echo 1: PHP 7.1
echo 2: PHP 8.1
echo C: Cancel
echo.
echo PHPのバージョンを変更する場合は1～2を選択してください。
choice /c 12C /M "Choose the version of PHP."
echo %errorlevel%
if %errorlevel% equ 1 goto PHP_71
if %errorlevel% equ 2 goto PHP_81
goto OnExit

:PHP_71
echo php7.1に変更します。
rmdir C:\xampp\apache
mklink /D C:\xampp\apache C:\xampp\apache71
del C:\xampp\apache\conf\extra\httpd-xampp.conf
mklink C:\xampp\apache\conf\extra\httpd-xampp.conf C:\xampp\apache\conf\extra\httpd-xampp71.conf
rmdir C:\xampp\php
mklink /D C:\xampp\php C:\xampp\php71
rmdir C:\xampp\phpMyAdmin
mklink /D C:\xampp\phpMyAdmin C:\xampp\phpMyAdmin71
goto OnExit

:PHP_81
echo php8.1に変更します。
rmdir C:\xampp\apache
mklink /D C:\xampp\apache C:\xampp\apache81
del C:\xampp\apache\conf\extra\httpd-xampp.conf
mklink C:\xampp\apache\conf\extra\httpd-xampp.conf C:\xampp\apache\conf\extra\httpd-xampp81.conf
rmdir C:\xampp\php
mklink /D C:\xampp\php C:\xampp\php81
rmdir C:\xampp\phpMyAdmin
mklink /D C:\xampp\phpMyAdmin C:\xampp\phpMyAdmin81
goto OnExit

:OnExit
```

このbatファイルを管理者権限で実行するとこんなウィンドウが出るので、
変更したいPHPのバージョンに割り振られている数字のキーを押下する。
ここでは8.1にしたいので2を押下した。
![rapture_20220421204629.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2636206/3e069614-60e8-9498-98d8-9fb302fff5e9.png)

キーを押した瞬間ウィンドウは閉じるがそれでいい。
xamppのコントロールパネルをひらき、ApacheとMySQLをスタートさせて問題がないようであればApacheのAdminをひらき、PHPのバージョンを確認する（画像の赤枠のリンクをクリックする）。
![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2636206/453f4fa6-0be4-05a8-a343-7a54cd44a994.png)

こうなっていればバージョンが変わっている
![rapture_20220421205609.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2636206/b340828b-18f3-77ed-ddd7-bd7c10182396.png)

# エラーが出たとき
Apacheが動かないケースがあるのではないだろうか。
私が試行錯誤しているとき、おおよそ下記のようなケースでApacheが動かなかった。
* 管理者権限でbatファイルを動かしていない
* `C:\xampp\apache71\conf\extra`や`C:\xampp\apache81\conf\extra`の中に`httpd-xampp71.conf`などにリネームしていない`httpd-xampp.conf`がある。リネームしていない`httpd-xampp.conf`があるとうまく動かないので消しておく
* リネームしていない「PHP」「Apache」「phpMyAdmin」フォルダがある。これもあるとうまく動かないので消しておく


# 懸念事項
この方法だとMySQLが複数になるのでPHPのバージョンをまたいで確認しようと思ったらその度にエクスポートとインポートを行わなければならず不便。
PHPのバージョンを行き来しながら作業を行う場合は不向きとなる。
今回はとりあえず動けばよかったし、行き来しながらの作業ではなかったのでこれで行った。


# 参考
https://qiita.com/shie-works/items/65234ffb6753e277d621
https://qiita.com/kaitaku/items/e0ae54fc04d222ded5c9