1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

XAMPP(PHP)のアップデートと躓きポイント

Last updated at Posted at 2022-09-07

そろそろ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 とかでも通せるかもしれない。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?