HRR Co., Ltd.

技術的な記録を残していくことを目的としています。1次情報を大事にしています。

WSL2のUbuntuにPHPの複数バージョンをインストールする

はじめに

複数バージョンを共存させたいケースは多々あると思うので記事化しました。
結論だけいうと、update-alternativesを使った例を示しました。

manpages.ubuntu.com

環境はWindows11、WSL2のUbuntu 20.04.6 LTSです。

手順

# リポジトリの追加
sudo add-apt-repository ppa:ondrej/php

Press [ENTER] to continue or Ctrl-c to cancel adding it.
と言われるので、問題がなければEnterキーを押下してください。

ppaPersonal Package Archives (PPA)らしいです。
「パーソナルパッケージアーカイブ(PPA)を使用すると、Launchpadによってaptリポジトリとして構築および公開されるUbuntuソースパッケージをアップロードできます。. PPAの詳細とそれらの使用方法は、ヘルプページで確認できます。.」

launchpad.net

# updateかけて
sudo apt update

# PHP8.2をインストールする
sudo apt install php8.2

たぶんデフォルトでPHP7.4が入っていると思うので、ここではPHP8.2を入れようと思います。

$ php -v
PHP 7.4.3-4ubuntu2.19 (cli) (built: Jun 27 2023 15:49:59) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.3-4ubuntu2.19, Copyright (c), by Zend Technologies

インストール後はこんな感じです。

$ php -v
PHP 8.2.14 (cli) (built: Dec 21 2023 20:19:23) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.2.14, Copyright (c) Zend Technologies
    with Zend OPcache v8.2.14, Copyright (c), by Zend Technologies

PHPの実行ファイルがどこにどんな感じになっているかというと、

$ which php
/usr/bin/php
  
$ ls -la /usr/bin/php*
lrwxrwxrwx 1 root root      21 Dec  7 13:30 /usr/bin/php -> /etc/alternatives/php
-rwxr-xr-x 1 root root 4786104 Jun 28  2023 /usr/bin/php7.4
-rwxr-xr-x 1 root root 5696296 Dec 22 05:19 /usr/bin/php8.2
  
$ ls -al /etc/alternatives/php
lrwxrwxrwx 1 root root 15 Nov  7 14:09 /etc/alternatives/php -> /usr/bin/php8.2

このように、/etc/alternatives/phpを仲介して、現在設定しているPHPのバージョンにリンクされています。
これを他のバージョンに切り替えるには、下記のコマンドを叩きます。

$ sudo update-alternatives --config php

There are 2 choices for the alternative php (providing /usr/bin/php).

  Selection    Path             Priority   Status
------------------------------------------------------------
* 0            /usr/bin/php8.2   82        auto mode
  1            /usr/bin/php7.4   74        manual mode
  2            /usr/bin/php8.2   82        manual mode

Press <enter> to keep the current choice[*], or type selection number:

ここで1にすると、PHPのバージョンが切り替わっているのがわかります。

$ ls -al /etc/alternatives/php
lrwxrwxrwx 1 root root 15 Dec 28 14:35 /etc/alternatives/php -> /usr/bin/php7.4
  
$ php -v
PHP 7.4.3-4ubuntu2.19 (cli) (built: Jun 27 2023 15:49:59) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.3-4ubuntu2.19, Copyright (c), by Zend Technologies

終わりに

sudo update-alternatives --config php

以後はこのコマンドを打ちましょうという話です。
長いのでaliasを設定しておくといいかもしれません。

以上でした!