EC2でPHPの任意のバージョンをインストールする

# 概要
EC2に任意のPHPをインストールする

初期状態のEC2にはPHPはインストールされていない

```
[ec2-user@ec2-php ~]$ php -v
-bash: php: command not found
```

# PHP 5.4
amzn2-coreに入ってるのでyumでインストールするだけ

```
[ec2-user@ec2-php ~]$ yum list | grep php
php.x86_64                             5.4.16-46.amzn2.0.2            amzn2-core

[ec2-user@ec2-php ~]$ sudo yum install -y php php-mbstring

[ec2-user@ec2-php ~]$ php -v
PHP 5.4.16 (cli) (built: Oct 31 2019 18:34:05)
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies
```

# PHP 7.2 7.3 7.4 8.0
amazon-linux-extrasに入ってるので適宜有効にしてインストール

```
[ec2-user@ec2-php ~]$ amazon-linux-extras | grep php
 15  php7.2                   available    \
 17  lamp-mariadb10.2-php7.2  available    \
 31  php7.3                   available    \
 42  php7.4                   available    [ =stable ]
 51  php8.0                   available    [ =stable ]

[ec2-user@ec2-php ~]$ sudo amazon-linux-extras enable php7.2
15  php7.2=latest            enabled      \
        [ =7.2.0  =7.2.4  =7.2.5  =7.2.8  =7.2.11  =7.2.13  =7.2.14
          =7.2.16  =7.2.17  =7.2.19  =7.2.21  =7.2.22  =7.2.23
          =7.2.24  =7.2.26  =stable ]

[ec2-user@ec2-php ~]$ sudo yum clean metadata && sudo yum install -y php php-mbstring

[ec2-user@ec2-php ~]$ php -v
PHP 7.2.34 (cli) (built: Oct 21 2020 18:03:20) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
```

# PHP 7.2.* 7.3.* 7.4.* 8.0.*
amazon-linux-extrasでPHPを有効にする際にバージョンを指定することも可能

```
[ec2-user@ec2-php ~]$ sudo amazon-linux-extras enable php7.2=7.2.16
15  php7.2=7.2.16            enabled      \
        [ =7.2.0  =7.2.4  =7.2.5  =7.2.8  =7.2.11  =7.2.13  =7.2.14
          =7.2.16  =7.2.17  =7.2.19  =7.2.21  =7.2.22  =7.2.23
          =7.2.24  =7.2.26  =stable ]

[ec2-user@ec2-php ~]$ sudo yum clean metadata && sudo yum install -y php php-mbstring

[ec2-user@ec2-php ~]$ php -v
PHP 7.2.16 (cli) (built: Apr  3 2019 18:39:35) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
```

# amazon-linux-extrasで有効なPHPを切り替える
amazon-linux-extrasで異なるバージョンのPHPを有効にしようとすると怒られる

```
[ec2-user@ec2-php ~]$ sudo amazon-linux-extras enable php7.2

[ec2-user@ec2-php ~]$ sudo amazon-linux-extras enable php8.0
Refusing because php8.0 could cause an invalid combination.
```
有効にしているPHPを無効にしてから再度有効にする必要がある

```
[ec2-user@ec2-php ~]$ sudo amazon-linux-extras disable php7.2

[ec2-user@ec2-php ~]$ sudo amazon-linux-extras enable php8.0
51  php8.0=latest            enabled      [ =stable ]
```

# それ以外のバージョンのPHPをインストールする
aws関連からは提供されていなさそうなのでremiからインストール

```
[ec2-user@ec2-php ~]$ sudo amazon-linux-extras install -y epel

[ec2-user@ec2-php ~]$ sudo yum install -y https://rpms.remirepo.net/enterprise/remi-release-7.rpm

[ec2-user@ec2-php ~]$ sudo yum install -y php56 php56-php-mbstring

[ec2-user@ec2-php ~]$ sudo . /opt/remi/php56/enable

[ec2-user@ec2-php ~]$ sudo ln -s /usr/bin/php56 /usr/bin/php

[ec2-user@ec2-php ~]$ php -v
PHP 5.6.40 (cli) (built: Apr 28 2021 14:35:32)
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies
```

# PHPを削除する
新しくPHPをインストールする場合は削除してからインストールする

```
sudo yum remove -y php-*
```

# 注意事項
後は必要に応じてPHP拡張をインストール

# 参考
https://aws.amazon.com/jp/premiumsupport/knowledge-center/ec2-install-extras-library-software/