そろそろPHPとMariaDBをアップデートしたい
XAMPPで何年か開発を行っていると、PHPやMariaDB(MySQL)がだいぶアップグレードしていて、新しいバージョンに対応したくなることがしばしばある。
これが結構面倒なので手順をまとめてみた。
対象ユーザー
- XAMPPでバーチャルホストを設定して複数のサイトを開発している
- PHPのバージョンアップで動かなかったときに古いPHPを利用できるようにしておきたい。
- 特に7.x → 8.xはdeplicatedな機能が多いので注意が必要
- え?vagrant?なにそれおいしいの?
手順
1. [古いXAMPP] DBのバックアップ(dump)
XAMPPなら http://localhost/phpmyadmin からバックアップできる。
xampp\mysql\bin\mysqldump.exe
で一括バックアップをしても良いが、この際不要なDBは切り捨てよう
2. [古いXAMPP] XAMPPの停止
XAMPPで実行しているサービス(PHPやMariaDB等)を停止し、「Quit」でXAMPP自体も終了する。
3. [古いXAMPP] XAMPPフォルダのリネーム
例: D:\xampp
→ D:\xampp_適当な文字列(日付とかバージョンとか)
リネームができないときは「2. [古いXAMPP] XAMPPの停止」に失敗しているので確認する。
4. XAMPPのダウンロード
ここからインストールしたいXAMPPを選択する
自分はDドライブに入れるようにしているのでportable版を愛用している。
(portable版は「その他のダウンロード → XAMPP → Windows」から取得できる)
5. XAMPPのインストール
もともとあったXAMPPのパスに展開し、インストールする
6. XAMPP(PHP, MariaDB)の起動
一旦XAMPPが正常動作するか確認する。
http://localhost にアクセスしてphpのバージョン等を確認
7. データベースのリストア
http://localhost/phpmyadmin へアクセスし、データベースを復元する。
root以外のユーザーがいたり、rootのパスワードを設定していたりする場合はユーザーデータも編集しておく。
※Apacheの設定でミスるとしばらくApacheが使えないので先にやっておくほうがよい
rootのパスワードを書き換えたらphpMyAdminにアクセスできなくなった
xampp\phpMyAdmin\config.inc.php
の $cfg['Servers'][$i]['password']
に設定したパスワードを入れる。
8. 旧データのコピー
旧XAMPP\htdocs
内の自作データを新XAMPPのhtdocsへコピーする。
新XAMPPと重複するファイルは上書きしない方がよい
人によってはかなりの時間がかかるのでその間に先の手順を進める。
9. PHPの設定の引継ぎ(php.iniを書き換えている人)
新旧の xampp\php\php.ini
を見比べて差分を吸収する。
よく書き換えられているのは以下
- timezone(Asia/Tokyoへの変更)
- memory_limit
- post_max_size
- upload_max_filesize
- max_execution_time
- extentionの利用可否
10. Apacheの設定の引継ぎ(httpd.conf等を書き換えている人)
xampp\apache\conf\httpd.conf
xampp\apache\conf\extra\*.conf
を新旧見比べて必要な差分を吸収する。
よく書き換えら得れているのは以下
-
xampp\apache\conf\httpd.conf
- LoadModuleの利用可否
-
xampp\apache\conf\extra\*.conf
xampp\apache\conf\extra\ssl.conf
xampp\apache\conf\extra\vhosts.conf
xampp\apache\conf\extra\xampp.conf
11. XAMPPを起動してテスト
ここまで終わったら再度XAMPPを起動し、Apacheが正常に起動するかどうかを確認。
大抵の場合ここで躓くので9,10をよく確認する
特にバーチャルホストの設定でエラーになるケースが多い。
(特定のサイトデータ(htdocs内)を引き継がず、バーチャルホストの設定だけ引き継いでしまった、とか)
その場合、バーチャルホストを設定をまっさらにして、起動・停止を繰り返しながら1サイトずつ追記していくと(原因がわかりやすくて)良い。
12. composerの再インストール
インストーラーからインストールしたものであれば「アプリと機能」に存在するのアンインストールし、本家から新たにダウンロードしてインストールする。
トラブルシューティング
phpのバージョンが古いまま
環境変数のPATHの設定が旧XAMPPのPHPになっている
「3. [古いXAMPP] XAMPPフォルダのリネーム」を行ったときに環境変数が変わってしまっている事があるため、
システム → システムの詳細設定 → 環境変数
へアクセスし、ユーザー環境変数およびシステム環境変数を確認する。
composerをインストール後、実行すると「'php' は、内部コマンドまたは外部コマンド~」と言われる
以下の記事と同じ原因。
環境変数のPATHEXT
に;.exe
を追記する
PHPのアップグレードによりサイトでエラーが出てしまう(deplicatedとか)
アップグレードに対応した修正を行うのが最適だが、XAMPP内で旧バージョンのPHPを並列実行するのがおすすめ。
旧XAMPPのphpフォルダをphpバージョンNo(例:php74)
とリネームし 新XAMPP内にコピーし、あとは下記の記事に従って設定するとCGI版で複数のPHPを並列実行することができる。
なお、バージョンの違うPHP環境化でComposerを利用する場合は設定が必要
composer installでエラー
PHPのバージョンに対応していない可能性がある。
よく見かけるのはFacebook SDK for PHP(facebook/graph-sdk)がPHP8.0に対応していないというもの。
Facebookログインを利用している人は注意すべし。
なお、修正版として公開されているjoelbutcher/facebook-graph-sdkもPHP8.1には対応していないので、上記「PHPのアップグレードによりサイトでエラーが出てしまう(deplicatedとか)」でPHPのバージョンを下げるか、最悪自前で作り直す必要がある
(めちゃくちゃハマった)
並列実行のPHPを利用すると「Warning: PHP Startup: fileinfo: Unable to initialize module」と表示される
php.ini
内のパス指定が間違っているので修正する。
または大文字小文字を見分けている際にPEARのパスがデフォルトで大文字で指定されているので小文字に変える
並列実行のPHPをコマンドラインから実行する
ビルトインサーバーなどを実行する場合
path_to_php\php.exe -S
などと、パス指定を行う必要がある
うまいことパスの設定をゴニョゴニョすれば php80 -S
とかでも通せるかもしれない。