【簡単】XAMPP+Windows環境でPHPのバージョンを切り替えて使う

XAMPPのPHPを切り替えたい

結構定番なカスタマイズなんですが、全然やったことがなかったのでメモ。
最もLinux環境をVagrantなんかで複数用意しちゃえば簡単なんですが、WindowsにXAMPP入れてサクッとデザインもリアルタイムで更新してガチャガチャやってさて納品みたいなお仕事の時は一々OS丸ごと用意して本番サーバーと同じ環境をローカルに用意して・・・みたいなことをやってられません。

WindowsローカルのCSSや画像データなど編集したらブラウザの更新をするだけで瞬時に反映されるXAMPP様に助けられる部分は多々あります。

今回はPHP7が入っているXAMPPでPHP5(5.3)を動かしたい。

クライアントの環境がPHP5(5.3)らしいのでXAMPPにPHP5(5.3)を動かせるように準備します。
どうやらXAMPP様が各バージョンのPHPを使えるように過去バージョンのXAMPPをダウンロードできるようにして頂いているようなので、
https://sourceforge.net/projects/xampp/files/XAMPP%20Windows/
ここからダウンロードさせて頂きます。

使いたいバージョンのPHPが入ったXAMPPそのものをダウンロードする形になるようですね。
この記事をご覧の皆様は既にXAMPP環境はありますのでインストーラ版ではなくZip版をダウンロードします。

厳密にはPHP5.3ですので

https://sourceforge.net/projects/xampp/files/XAMPP%20Windows/1.7.7/

の中のxampp-win32-1.7.7-VC9.zip
こちらをダウンロードしました。

複数のバージョンを使うためXAMPPのPHPディレクトリをリネームする。

XAMPPの現在バージョンのphpフォルダのリネーム

C:\xampp\php

C:\xampp\php71
にリネームする。

Apacheのhttpd-xampp.confファイルのリネーム

C:\xampp\apache\conf\extra\httpd-xampp.conf

C:\xampp\apache\conf\extra\httpd-xampp71.conf
にリネーム

過去バージョンのXAMPPからファイルを移動してくる

まずはPHP5.3本体を用意

xampp-win32-1.7.7-VC9.zipがダウンロードされていると思いますのでこちらを解凍します。

解凍すると上記のようになるので
「php」ディレクトリを「php53」にリネームします。
この「php53」をC:\xampp\に移動します。

こんな感じになります。PHPが2種類になりました。
PHP5系の中でも5.3はphp5apache2_4.dllが必要なのでゲットしてきます。
https://www.apachelounge.com/download/additional/
ここにあります。
文字が小さく非常に見つけにくいので「php5apache2_4.dll-php-5.3-win32.zip」でサイト内検索してください。
ダウンロード後、解凍したら
\php5apache2_4.dll-php-5.3-win32\PHP 5.3.10\php5apache2_4.dll

C:\xampp\php53\php5apache2_4.dll
に移動

こうなります。

httpd-xampp53.confを用意

\php5apache2_4.dll-php-5.3-win32\apache\conf\extra
から
C:\xampp\apache\conf\extra

「httpd-xampp.conf」から「httpd-xampp53.conf」にリネームして移動させます。

さらに「httpd-xampp53.conf」を編集

php5apache2_2.dllを読み込むと起動しませんでしたので
httpd-xampp53.confを編集します。

LoadModule php5_module "/xampp/php/php5apache2_2.dll"

変更します ↓

LoadModule php5_module "/xampp/php/php5apache2_4.dll"

これで準備完了です。

シンボリックリンクを作成する。さらにバッチファイルにして使いやすくする。

ボタン一つで切り替えられるようにしたいのでシンボリックリンクを切り替えるバッチファイルを作成します。

まずは一旦動作確認です。

PHP7.1のシンボリックリンクを作成

1.以下のコードを実行します。

mklink C:\xampp\apache\conf\extra\httpd-xampp.conf

実行例:

C:\WINDOWS\system32>mklink C:\xampp\apache\conf\extra\httpd-xampp.conf C:\xampp\apache\conf\extra\httpd-xampp71.conf
C:\xampp\apache\conf\extra\httpd-xampp.conf <<===>> C:\xampp\apache\conf\extra\httpd-xampp71.conf のシンボリック リンク が作成されました

2.以下のコードを実行します。

mklink /D C:\xampp\php C:\xampp\php71

実行例:

C:\WINDOWS\system32>mklink /D C:\xampp\php C:\xampp\php71
C:\xampp\php <<===>> C:\xampp\php71 のシンボリック リンクが作成されました

これによってPHP7で実行することが出来ました。

XAMPPが起動できなくなった場合

この辺でXAMPPが起動出来ない方は
コンパネ > システム > 設定の変更(システムのプロパティーを開く) > 環境設定タブ > 環境変数

システム環境変数 > Path

C:\xampp\php
C:\xampp\mysql\bin
を追加してみてください。
動くかと思います。

PHPのバージョンの確認

XAMPPのシェルを立ち上げて
「# php -v」を実行してみました。

</p>
<h1>php -v</h1>
<p>PHP 7.2.11 (cli) (built: Oct 10 2018 02:39:52) ( ZTS MSVC15 (Visual C++ 2017) x86 )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies

自分のXAMPPがPHP7.1だと思いこんでいましたがPHP7.2だったんですね・・・勘違いしてました・・・。
まあこれはこれでいいとして次はPHP5の設定です。

バッチファイルの作成

シンボリックリンクを切り替えるバッチファイルです。
ほんとはPHP7.2だったけど7.1だった前提で進めています。。。
ちなみに、SJISで保存してください。日本語が文字化けしますので。

echo.
echo phpのバージョンを確認します。
echo.
php -v
echo.
echo 1: PHP 5.3
echo 2: PHP 7.1
echo C: Cancel
echo.
echo 現在のバージョンを変更する場合は1~2を選択してください。</p>
<dl>
<dt>choice /c 12C /M "Choose the version of PHP."</dt>
<dt>echo %errorlevel%</dt>
<dt>if %errorlevel% equ 1 goto PHP_53</dt>
<dt>if %errorlevel% equ 2 goto PHP_71</dt>
<dt>goto OnExit</dt>
<dd><p>PHP_53
echo php5.3に変更します。
del C:\xampp\apache\conf\extra\httpd-xampp.conf
mklink C:\xampp\apache\conf\extra\httpd-xampp.conf C:\xampp\apache\conf\extra\httpd-xampp53.conf
rmdir C:\xampp\php
mklink /D C:\xampp\php C:\xampp\php53
goto OnExit</p></dd>
<dd><p>PHP_71
echo php7.1に変更します。
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
goto OnExit</p></dd>
<dd>OnExit

こちらを管理者権限で実行すれば切り替えられるはずです。
やってみましょう。

無事に5.3と7.2を切り替えられるようになりました。

PHP, XAMPP

Posted by bistro