PHP を CentOS Stream 9 にインストールする

環境構築

本記事では、PHP 8.3 を CentOS Stream 9 にインストールする方法について説明しています。
また、他の PHP バージョン 7.4、8.1、8.2 等に切り替える方法についても説明しています。

環境情報

本記事では、以下バージョンにてインストールを行った結果を掲載しています。
・OS:CentOS Stream 9
・Apache:2.4
・PHP:8.3

今回 WebアプリをPHPで作成する想定での環境構築のため、 前提条件として Apache 2.4 がインストールされている必要があります。
Apache 2.4 の環境構築方法についてはこちらの記事 にまとめていますのでまだ準備できていない方は参考にしていただければと思います。

インストール完了後に、CentOS 内に PHP が構築される環境イメージ図です。

黄色背景の部分が本手順で PHP をインストールすることで作成されます。
ホストOS内の Virtual Box 内にあるゲストOS の CentOS Stream 9(192.168.56.88)に PHP 8.3 が構築されるイメージです。

記事の最後には、PHP のバージョンアップ時などに活用できるコマンドについても記載しています。

それではインストールしていきましょう!

インストール

今回は CentOS Stream 8 から追加された モジュール というパッケージ管理の仕組みを利用してインストールしていきます。

CentOS Stream 9(192.168.56.88)にログインした状態で以下コマンドを実行してインストールを行います。

1.CentOS Stresm9 の標準リポジトリでインストール可能な PHP バージョンの確認 & サポート期限について

はじめに、CentOS Stream 9 の標準リポジトリでインストール可能な PHP のバージョンを確認してみましょう。

Bash
dnf info php
# [check] => CentOS Stream 9 で標準インストールされる PHP はバージョン 8.0 であることが確認できます

dnf module list php             # PHP モジュールの一覧を確認
# [check] => CentOS Stream 9 - AppStream リポジトリでは、8.1, 8.2 も選択できるようです
実行結果
[root@localhost ~]# dnf info php
CentOS Stream 9 - BaseOS                                                                              5.6 kB/s | 8.2 kB     00:01
CentOS Stream 9 - BaseOS                                                                              2.8 MB/s | 8.2 MB     00:02
CentOS Stream 9 - AppStream                                                                            25 kB/s | 8.3 kB     00:00
CentOS Stream 9 - AppStream                                                                           4.7 MB/s |  20 MB     00:04
CentOS Stream 9 - Extras packages                                                                      41 kB/s | 8.9 kB     00:00
利用可能なパッケージ
名前         : php
バージョン   : 8.0.30
リリース     : 1.el9
Arch         : x86_64
サイズ       : 4.7 k
ソース       : php-8.0.30-1.el9.src.rpm
リポジトリー : appstream
概要         : PHP scripting language for creating dynamic web sites
URL          : http://www.php.net/
ライセンス   : PHP and Zend and BSD and MIT and ASL 1.0 and NCSA
説明         : PHP is an HTML-embedded scripting language. PHP attempts to make it
             : easy for developers to write dynamically generated web pages. PHP also
             : offers built-in database integration for several commercial and
             : non-commercial database management systems, so writing a
             : database-enabled webpage with PHP is fairly simple. The most common
             : use of PHP coding is probably as a replacement for CGI scripts.

[root@localhost ~]# # [check] => CentOS Stream 9 で標準インストールされる PHP はバージョン 8.0 であることが確認できます
[root@localhost ~]#
[root@localhost ~]#
[root@localhost ~]# dnf module list php             # PHP モジュールの一覧を確認
メタデータの期限切れの最終確認: 0:00:15 前の 2024年08月24日 19時04分36秒 に実施しました。
CentOS Stream 9 - AppStream
Name                    Stream                   Profiles                                     Summary
php                     8.1                      common [d], devel, minimal                   PHP scripting language
php                     8.2                      common [d], devel, minimal                   PHP scripting language

ヒント: [d]efault, [e]nabled, [x]disabled, [i]nstalled
[root@localhost ~]# # [check] => CentOS Stream 9 - AppStream リポジトリでは、8.1, 8.2 も選択できるようです
[root@localhost ~]#

標準リポジトリでは、PHP 8.0、8.1、8.2 がインストール可能であることがわかりました。

今回は、パッケージ管理の仕組みを利用して最新版のPHPをインストールしていくので、PHPの各種バージョンを提供している remi リポジトリを使用して記事作成時点で最新版の PHP 8.3 をインストールしていきます。

ポリシー都合等でサードパーティーリポジトリ(remi等)を使用不可の場合で最新版を使用したい場合は、AppStream の最新バージョン(8.2)を使うことになるでしょう。
もしくは、PHP公式が公開しているソースコードを取得しビルド、インストールといった方法になるでしょう。

remi レポジトリを追加することで、PHP 8.0よりも前のバージョン 7.4 等を CentOS Stream 9 にインストール可能です。

以下、サポート期限についての余談です。インストール手順をお急ぎの方は 2.へお進みください
※2024/8/24時点での確認内容ですので、最新情報は公式サイトをご確認いただき、確認方法の参考程度にお読みいただければと思います。

はじめに PHPの公式サイト で、PHPのサポート期限を確認してみます。

PHP 8.0 まではサポートが終了しており、リリースから約4年後にセキュリティサポート終了となるようです。
サポート終了後は、対象バージョンに脆弱性が見つかっても対処されない(脆弱性が残ったままの PHP となる)とイメージいただければと思います。

次に RHELの公式サイト で PHP のサポート期限を確認してみます。

※今回、OS は CentOS Stream 9 なのになぜ RHEL のサイトを確認?という疑問については、こちらの RedHat の記事 に RHEL と CentOS Stream の関係性が記載されていますので、気になる方はご確認ください。

手順の最初に実行した確認コマンドで結果に出てきた PHP 8.0、8.1、8.2 のサポート期限を確認できました。
それぞれ PHP 公式のサポート期限とは異なる日付が設定されています。
また、PHP 8.0 は Full Life となっており PHP 8.1 や 8.2 よりも長い 2032年5月までがサポート期限となっています。

ここで、PHP 公式サイトのサポート期限より RHEL のサポートの方が長いものが疑問になります。

これは、PHP 公式のサポートが終了した後も、該当のバージョンで脆弱性が見つかった際に RHEL 側で対処したものを提供してくれる期限となっています。

・特定のバージョンの PHP を長く使いたい。
・PHP のバージョンアップを頻繁に行えない。
といった要件がある場合には非常に助かると思います。

いずれのバージョンを利用しているにせよセキュリティ観点では、
・サポート期間内であること
・対象バージョンの最新版(PHP 8.1.xx の xx の部分)
を利用していることが重要です。

話をインストールに戻します。

2.リポジトリの追加

PHP の各種バージョンを提供している remi レポジトリを追加します。

追加するリポジトリの URL は Remi’s RPM repository のサイト で確認します。

Bash
dnf repolist all                                # リポジトリの一覧を確認
# [check] => CentOS Stream 9 標準のリポジトリのみが表示されていることが確認できる

dnf -y install https://rpms.remirepo.net/enterprise/remi-release-9.rpm  # remiリポジトリの追加

dnf repolist all | grep -v 'CentOS Stream 9'    # 追加されたリポジトリ(CentOS Stream 9 を含まないもの)を確認
# [check] => remi と epel(Extra Packages for Enterprise Linux) が追加されていること
実行結果
[root@localhost ~]# dnf repolist all                                # リポジトリの一覧を確認
repo id                                                repo の名前                                                              状態
appstream                                              CentOS Stream 9 - AppStream                                              有効化
appstream-debuginfo                                    CentOS Stream 9 - AppStream - Debug                                      無効化
appstream-source                                       CentOS Stream 9 - AppStream - Source                                     無効化
baseos                                                 CentOS Stream 9 - BaseOS                                                 有効化
baseos-debuginfo                                       CentOS Stream 9 - BaseOS - Debug                                         無効化
baseos-source                                          CentOS Stream 9 - BaseOS - Source                                        無効化
crb                                                    CentOS Stream 9 - CRB                                                    無効化
crb-debuginfo                                          CentOS Stream 9 - CRB - Debug                                            無効化
crb-source                                             CentOS Stream 9 - CRB - Source                                           無効化
extras-common                                          CentOS Stream 9 - Extras packages                                        有効化
extras-common-source                                   CentOS Stream 9 - Extras packages - Source                               無効化
highavailability                                       CentOS Stream 9 - HighAvailability                                       無効化
highavailability-debuginfo                             CentOS Stream 9 - HighAvailability - Debug                               無効化
highavailability-source                                CentOS Stream 9 - HighAvailability - Source                              無効化
nfv                                                    CentOS Stream 9 - NFV                                                    無効化
nfv-debuginfo                                          CentOS Stream 9 - NFV - Debug                                            無効化
nfv-source                                             CentOS Stream 9 - NFV - Source                                           無効化
resilientstorage                                       CentOS Stream 9 - ResilientStorage                                       無効化
resilientstorage-debuginfo                             CentOS Stream 9 - ResilientStorage - Debug                               無効化
resilientstorage-source                                CentOS Stream 9 - ResilientStorage - Source                              無効化
rt                                                     CentOS Stream 9 - RT                                                     無効化
rt-debuginfo                                           CentOS Stream 9 - RT - Debug                                             無効化
rt-source                                              CentOS Stream 9 - RT - Source                                            無効化
[root@localhost ~]# # [check] => CentOS Stream 9 標準のリポジトリのみが表示されていることが確認できる
[root@localhost ~]#
[root@localhost ~]#
[root@localhost ~]# dnf -y install https://rpms.remirepo.net/enterprise/remi-release-9.rpm  # remiリポジトリの追加
メタデータの期限切れの最終確認: 0:02:58 前の 2024年08月24日 19時04分36秒 に実施しました。
remi-release-9.rpm                                                                                     13 kB/s |  30 kB     00:02
依存関係が解決しました。
======================================================================================================================================
 パッケージ                          アーキテクチャー         バージョン                        リポジトリー                    サイズ
======================================================================================================================================
インストール:
 remi-release                        noarch                   9.4-2.el9.remi                    @commandline                     30 k
依存関係のインストール:
 epel-release                        noarch                   9-7.el9                           extras-common                    19 k
弱い依存関係のインストール:
 epel-next-release                   noarch                   9-7.el9                           extras-common                   8.1 k

トランザクションの概要
======================================================================================================================================
インストール  3 パッケージ

合計サイズ: 57 k
ダウンロードサイズの合計: 27 k
インストール後のサイズ: 60 k
パッケージのダウンロード:
(1/2): epel-next-release-9-7.el9.noarch.rpm                                                            73 kB/s | 8.1 kB     00:00
(2/2): epel-release-9-7.el9.noarch.rpm                                                                145 kB/s |  19 kB     00:00
--------------------------------------------------------------------------------------------------------------------------------------
合計                                                                                                   36 kB/s |  27 kB     00:00
CentOS Stream 9 - Extras packages                                                                     2.1 MB/s | 2.1 kB     00:00
GPG  0x1D997668 をインポート中:
 Userid     : "CentOS Extras SIG (https://wiki.centos.org/SpecialInterestGroup) <security@centos.org>"
 Fingerprint: 363F C097 2F64 B699 AED3 968E 1FF6 A217 1D99 7668
 From       : /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-Extras-SHA512
鍵のインポートに成功しました
トランザクションを確認しています
トランザクションの確認に成功しました。
トランザクションをテストしています
トランザクションのテストに成功しました。
トランザクションを実行しています
  準備中           :                                                                                                              1/1
  インストール中   : epel-release-9-7.el9.noarch                                                                                  1/3
  scriptletの実行中: epel-release-9-7.el9.noarch                                                                                  1/3
Many EPEL packages require the CodeReady Builder (CRB) repository.
It is recommended that you run /usr/bin/crb enable to enable the CRB repository.

  インストール中   : epel-next-release-9-7.el9.noarch                                                                             2/3
  インストール中   : remi-release-9.4-2.el9.remi.noarch                                                                           3/3
  scriptletの実行中: remi-release-9.4-2.el9.remi.noarch                                                                           3/3
  検証中           : epel-next-release-9-7.el9.noarch                                                                             1/3
  検証中           : epel-release-9-7.el9.noarch                                                                                  2/3
  検証中           : remi-release-9.4-2.el9.remi.noarch                                                                           3/3

インストール済み:
  epel-next-release-9-7.el9.noarch             epel-release-9-7.el9.noarch             remi-release-9.4-2.el9.remi.noarch

完了しました!
[root@localhost ~]#
[root@localhost ~]#
[root@localhost ~]# dnf repolist all | grep -v 'CentOS Stream 9'    # 追加されたリポジトリ(CentOS Stream 9 を含まないもの)を確認
repo id                       repo の名前                                 状態
epel                          Extra Packages for Enterprise Linux 9 - x86 有効化
epel-cisco-openh264           Extra Packages for Enterprise Linux 9 openh 有効化
epel-cisco-openh264-debuginfo Extra Packages for Enterprise Linux 9 openh 無効化
epel-cisco-openh264-source    Extra Packages for Enterprise Linux 9 openh 無効化
epel-debuginfo                Extra Packages for Enterprise Linux 9 - x86 無効化
epel-next                     Extra Packages for Enterprise Linux 9 - Nex 有効化
epel-next-debuginfo           Extra Packages for Enterprise Linux 9 - Nex 無効化
epel-next-source              Extra Packages for Enterprise Linux 9 - Nex 無効化
epel-next-testing             Extra Packages for Enterprise Linux 9 - Nex 無効化
epel-next-testing-debuginfo   Extra Packages for Enterprise Linux 9 - Nex 無効化
epel-next-testing-source      Extra Packages for Enterprise Linux 9 - Nex 無効化
epel-source                   Extra Packages for Enterprise Linux 9 - x86 無効化
epel-testing                  Extra Packages for Enterprise Linux 9 - Tes 無効化
epel-testing-debuginfo        Extra Packages for Enterprise Linux 9 - Tes 無効化
epel-testing-source           Extra Packages for Enterprise Linux 9 - Tes 無効化
remi                          Remi's RPM repository for Enterprise Linux  無効化
remi-debuginfo                Remi's RPM repository for Enterprise Linux  無効化
remi-modular                  Remi's Modular repository for Enterprise Li 有効化
remi-modular-debuginfo        Remi's Modular repository for Enterprise Li 無効化
remi-modular-test             Remi's Modular testing repository for Enter 無効化
remi-modular-test-debuginfo   Remi's Modular testing repository for Enter 無効化
remi-safe                     Safe Remi's RPM repository for Enterprise L 有効化
remi-safe-debuginfo           Remi's RPM repository for Enterprise Linux  無効化
remi-test                     Remi's test RPM repository for Enterprise L 無効化
remi-test-debuginfo           Remi's test RPM repository for Enterprise L 無効化
[root@localhost ~]# # [check] => remi と epel(Extra Packages for Enterprise Linux) が追加されていること
[root@localhost ~]#

remi リポジトリをインストールすると、必要な epel リポジトリというが依存関係で必要なので未導入の場合は一緒にインストールされます。

3.PHP モジュールの確認 & インストールするバージョンの指定

remi リポジトリを追加したので、インストール可能な PHP バージョンの確認をしていきます。

手順1.では出てこなかった、PHP 8.3 が確認できるはずです。

Bash
dnf module list php                 # PHP モジュールの一覧を確認
# [check] => インストール済を表す [i] が表示されているバージョンが無いこと

dnf module -y reset php             # PHP モジュールを初期状態(有効でも無効でもない状態)にリセット
dnf module -y enable php:remi-8.3   # remi-8.3 ストリームの PHP モジュールを有効化
dnf module list php                 # PHP モジュールの一覧を確認
# [check] => 有効を表す [e] が remi-8.3 に表示されていること
実行結果
[root@localhost ~]# dnf module list php                 # PHP モジュールの一覧を確認
Extra Packages for Enterprise Linux 9 - x86_64                                                        6.5 MB/s |  22 MB     00:03
Extra Packages for Enterprise Linux 9 openh264 (From Cisco) - x86_64                                  1.7 kB/s | 2.5 kB     00:01
Extra Packages for Enterprise Linux 9 - Next - x86_64                                                 323 kB/s | 276 kB     00:00
Remi's Modular repository for Enterprise Linux 9 - x86_64                                             219 kB/s | 675 kB     00:03
Safe Remi's RPM repository for Enterprise Linux 9 - x86_64                                            294 kB/s | 1.0 MB     00:03
CentOS Stream 9 - AppStream
Name                   Stream                     Profiles                                     Summary
php                    8.1                        common [d], devel, minimal                   PHP scripting language
php                    8.2                        common [d], devel, minimal                   PHP scripting language

Remi's Modular repository for Enterprise Linux 9 - x86_64
Name                   Stream                     Profiles                                     Summary
php                    remi-7.4                   common [d], devel, minimal                   PHP scripting language
php                    remi-8.0                   common [d], devel, minimal                   PHP scripting language
php                    remi-8.1                   common [d], devel, minimal                   PHP scripting language
php                    remi-8.2                   common [d], devel, minimal                   PHP scripting language
php                    remi-8.3                   common [d], devel, minimal                   PHP scripting language

ヒント: [d]efault, [e]nabled, [x]disabled, [i]nstalled
[root@localhost ~]# # [check] => インストール済を表す [i] が表示されているバージョンが無いこと
[root@localhost ~]#
[root@localhost ~]# dnf module -y reset php             # PHP モジュールを初期状態(有効でも無効でもない状態)にリセット
メタデータの期限切れの最終確認: 0:00:25 前の 2024年08月24日 19時10分02秒 に実施しました。
依存関係が解決しました。
行うべきことはありません。
完了しました!
[root@localhost ~]#
[root@localhost ~]# dnf module -y enable php:remi-8.3   # remi-8.3 ストリームの PHP モジュールを有効化
メタデータの期限切れの最終確認: 0:00:36 前の 2024年08月24日 19時10分02秒 に実施しました。
依存関係が解決しました。
======================================================================================================================================
 パッケージ                      アーキテクチャー               バージョン                      リポジトリー                    サイズ
======================================================================================================================================
モジュールストリームの有効化中:
 php                                                            remi-8.3

トランザクションの概要
======================================================================================================================================

完了しました!
[root@localhost ~]#
[root@localhost ~]# dnf module list php                 # PHP モジュールの一覧を確認
メタデータの期限切れの最終確認: 0:00:45 前の 2024年08月24日 19時10分02秒 に実施しました。
CentOS Stream 9 - AppStream
Name                  Stream                        Profiles                                    Summary
php                   8.1                           common [d], devel, minimal                  PHP scripting language
php                   8.2                           common [d], devel, minimal                  PHP scripting language

Remi's Modular repository for Enterprise Linux 9 - x86_64
Name                  Stream                        Profiles                                    Summary
php                   remi-7.4                      common [d], devel, minimal                  PHP scripting language
php                   remi-8.0                      common [d], devel, minimal                  PHP scripting language
php                   remi-8.1                      common [d], devel, minimal                  PHP scripting language
php                   remi-8.2                      common [d], devel, minimal                  PHP scripting language
php                   remi-8.3 [e]                  common [d], devel, minimal                  PHP scripting language

ヒント: [d]efault, [e]nabled, [x]disabled, [i]nstalled
[root@localhost ~]# # [check] => 有効を表す [e] が remi-8.3 に表示されていること
[root@localhost ~]#

ここで、remi-8.3 Stream を有効 [e] にすることで次の手順で、インストール時にPHP 8.3 がインストールされます。
他の Stream を有効 [e] にすれば他のバージョンがインストールされます。

4.PHP 8.3 のインストール

PHP をインストールしていきます。

Bash
dnf list installed | grep -i php    # php を含むインストール済みパッケージの確認
# [check] => 何も表示されないこと

dnf info php                        # インストール対象のバージョンを確認
# [check] => PHP 8.3.x となっていること
dnf module -y install php           # PHP をインストール

dnf info php-mysqlnd                # mysql用の php モジュール追加(バージョンを確認)
# [check] => PHP 8.3.x となっていること
dnf install -y php-mysqlnd          # php-mysqlnd をインストール

dnf list installed | grep -i php    # php を含むインストール済みパッケージの確認
# [check] => インストールしたパッケージが表示されること
実行結果
[root@localhost ~]# dnf list installed | grep -i php    # php を含むインストール済みパッケージの確認
[root@localhost ~]# # [check] => 何も表示されないこと
[root@localhost ~]#
[root@localhost ~]# dnf info php                        # インストール対象のバージョンを確認
メタデータの期限切れの最終確認: 0:12:26 前の 2024年08月24日 19時10分02秒 に実施しました。
利用可能なパッケージ
名前         : php
バージョン   : 8.3.10
リリース     : 1.el9.remi
Arch         : x86_64
サイズ       : 1.8 M
ソース       : php-8.3.10-1.el9.remi.src.rpm
リポジトリー : remi-modular
概要         : PHP scripting language for creating dynamic web sites
URL          : http://www.php.net/
ライセンス   : PHP-3.01 AND Zend-2.0 AND BSD-2-Clause AND MIT AND Apache-1.0 AND NCSA AND BSL-1.0
説明         : PHP is an HTML-embedded scripting language. PHP attempts to make it
             : easy for developers to write dynamically generated web pages. PHP also
             : offers built-in database integration for several commercial and
             : non-commercial database management systems, so writing a
             : database-enabled webpage with PHP is fairly simple. The most common
             : use of PHP coding is probably as a replacement for CGI scripts.
             :
             : The php package contains the module (often referred to as mod_php)
             : which adds support for the PHP language to Apache HTTP Server.

[root@localhost ~]# # [check] => PHP 8.3.x となっていること
[root@localhost ~]#
[root@localhost ~]# dnf module -y install php           # PHP をインストール
メタデータの期限切れの最終確認: 0:12:34 前の 2024年08月24日 19時10分02秒 に実施しました。
依存関係が解決しました。
======================================================================================================================================
 パッケージ                         アーキテクチャー         バージョン                          リポジトリー                   サイズ
======================================================================================================================================
group/moduleパッケージをインストール:
 php-cli                            x86_64                   8.3.10-1.el9.remi                   remi-modular                   5.6 M
 php-common                         x86_64                   8.3.10-1.el9.remi                   remi-modular                   1.2 M
 php-fpm                            x86_64                   8.3.10-1.el9.remi                   remi-modular                   1.9 M
 php-mbstring                       x86_64                   8.3.10-1.el9.remi                   remi-modular                   581 k
 php-xml                            x86_64                   8.3.10-1.el9.remi                   remi-modular                   223 k
依存関係のインストール:
 httpd-filesystem                   noarch                   2.4.57-8.el9                        appstream                       13 k
 libxslt                            x86_64                   1.1.34-9.el9                        appstream                      243 k
 oniguruma5php                      x86_64                   6.9.9-1.el9.remi                    remi-safe                      219 k
弱い依存関係のインストール:
 nginx-filesystem                   noarch                   1:1.20.1-16.el9                     appstream                      9.3 k
モジュールプロファイルのインストール中:
 php/common

トランザクションの概要
======================================================================================================================================
インストール  9 パッケージ

ダウンロードサイズの合計: 10 M
インストール後のサイズ: 55 M
パッケージのダウンロード:

<<<<<<<<<<<<<<< 省略 >>>>>>>>>>>>>>>

インストール済み:
  httpd-filesystem-2.4.57-8.el9.noarch       libxslt-1.1.34-9.el9.x86_64                nginx-filesystem-1:1.20.1-16.el9.noarch
  oniguruma5php-6.9.9-1.el9.remi.x86_64      php-cli-8.3.10-1.el9.remi.x86_64           php-common-8.3.10-1.el9.remi.x86_64
  php-fpm-8.3.10-1.el9.remi.x86_64           php-mbstring-8.3.10-1.el9.remi.x86_64      php-xml-8.3.10-1.el9.remi.x86_64

完了しました!
[root@localhost ~]#
[root@localhost ~]#
[root@localhost ~]# dnf info php-mysqlnd                # mysql用の php モジュール追加(バージョンを確認)
メタデータの期限切れの最終確認: 0:13:00 前の 2024年08月24日 19時10分02秒 に実施しました。
利用可能なパッケージ
名前         : php-mysqlnd
バージョン   : 8.3.10
リリース     : 1.el9.remi
Arch         : x86_64
サイズ       : 219 k
ソース       : php-8.3.10-1.el9.remi.src.rpm
リポジトリー : remi-modular
概要         : A module for PHP applications that use MySQL databases
URL          : http://www.php.net/
ライセンス   : PHP-3.01
説明         : The php-mysqlnd package contains a dynamic shared object that will add
             : MySQL database support to PHP. MySQL is an object-relational database
             : management system. PHP is an HTML-embeddable scripting language. If
             : you need MySQL support for PHP applications, you will need to install
             : this package and the php package.
             :
             : This package use the MySQL Native Driver

[root@localhost ~]# # [check] => PHP 8.3.x となっていること
[root@localhost ~]#
[root@localhost ~]#
[root@localhost ~]# dnf install -y php-mysqlnd          # php-mysqlnd をインストール
メタデータの期限切れの最終確認: 0:16:49 前の 2024年08月24日 19時10分02秒 に実施しました。
依存関係が解決しました。
======================================================================================================================================
 パッケージ                     アーキテクチャー          バージョン                            リポジトリー                    サイズ
======================================================================================================================================
インストール:
 php-mysqlnd                    x86_64                    8.3.10-1.el9.remi                     remi-modular                    219 k
依存関係のインストール:
 php-pdo                        x86_64                    8.3.10-1.el9.remi                     remi-modular                    121 k

トランザクションの概要
======================================================================================================================================
インストール  2 パッケージ

ダウンロードサイズの合計: 340 k
インストール後のサイズ: 1.4 M
パッケージのダウンロード:

<<<<<<<<<<<<<<< 省略 >>>>>>>>>>>>>>>

インストール済み:
  php-mysqlnd-8.3.10-1.el9.remi.x86_64                                php-pdo-8.3.10-1.el9.remi.x86_64

完了しました!
[root@localhost ~]#
[root@localhost ~]#
[root@localhost ~]# dnf list installed | grep -i php    # php を含むインストール済みパッケージの確認
oniguruma5php.x86_64                  6.9.9-1.el9.remi            @remi-safe
php-cli.x86_64                        8.3.10-1.el9.remi           @remi-modular
php-common.x86_64                     8.3.10-1.el9.remi           @remi-modular
php-fpm.x86_64                        8.3.10-1.el9.remi           @remi-modular
php-mbstring.x86_64                   8.3.10-1.el9.remi           @remi-modular
php-mysqlnd.x86_64                    8.3.10-1.el9.remi           @remi-modular
php-pdo.x86_64                        8.3.10-1.el9.remi           @remi-modular
php-xml.x86_64                        8.3.10-1.el9.remi           @remi-modular
[root@localhost ~]# # [check] => インストールしたパッケージが表示されること
[root@localhost ~]#

5.インストール後の確認

PHP のバージョン確認をしていきます。
また、phpinfo() の結果を表示させてPHPが動作しているかも確認してみます。

Bash
php -v  # php のバージョン確認
# [check] => バージョン情報に 8.3.xx と表示されること

echo '<?php phpinfo(); ?>' > /var/www/html/index.php    # 確認用ページの作成

systemctl restart httpd                                 # httpd 再起動
systemctl status httpd                                  # httpd 状態確認
# [check] => active (running) と表示されること

# http://192.168.56.88/index.php                        # ブラウザにてアクセス確認(確認用ページ)
実行結果
[root@localhost ~]# php -v  # php のバージョン確認
PHP 8.3.10 (cli) (built: Jul 30 2024 13:44:37) (NTS gcc x86_64)
Copyright (c) The PHP Group
Zend Engine v4.3.10, Copyright (c) Zend Technologies
[root@localhost ~]#
[root@localhost ~]# echo '<?php phpinfo(); ?>' > /var/www/html/index.php    # 確認用ページの作成
[root@localhost ~]#
[root@localhost ~]# systemctl restart httpd                                 # httpd 再起動
[root@localhost ~]# systemctl status httpd                                  # httpd 状態確認
 httpd.service - The Apache HTTP Server
     Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; preset: disabled)
    Drop-In: /etc/systemd/system/httpd.service.d
             mqphp-fpm.conf
     Active: active (running) since Sun 2024-08-25 11:30:45 JST; 6s ago
       Docs: man:httpd.service(8)
   Main PID: 11802 (httpd)
     Status: "Started, listening on: port 80"
      Tasks: 177 (limit: 23141)
     Memory: 25.6M
        CPU: 198ms
     CGroup: /system.slice/httpd.service
             tq11802 /usr/sbin/httpd -DFOREGROUND
             tq11803 /usr/sbin/httpd -DFOREGROUND
             tq11804 /usr/sbin/httpd -DFOREGROUND
             tq11805 /usr/sbin/httpd -DFOREGROUND
             mq11806 /usr/sbin/httpd -DFOREGROUND

 8月 25 11:30:45 localhost.localdomain systemd[1]: Starting The Apache HTTP Server...
 8月 25 11:30:45 localhost.localdomain httpd[11802]: Server configured, listening on: port 80
 8月 25 11:30:45 localhost.localdomain systemd[1]: Started The Apache HTTP Server.
[root@localhost ~]# # [check] => active (running) と表示されること

10行目の確認(http://192.168.56.88/index.php)で下記画面が表示されていればインストール成功です。

PHP 8.3 のインストール作業は以上です。

6.おまけ(他のPHPバージョンに切り替える)

今回、PHP 8.3 のインストールを行いました。
最後に頻繁に使う機能でないですがおまけとして他の PHP バージョンを使いたいとなった場合に便利な方法を載せておきます。

PHP 8.3(remi-8.3) から PHP 8.2(remi-8.2) に切り替えます。

Bash
dnf module list php                     # 状況確認
# [check] => remi-8.3 に [e] と [i] が表示されていること

dnf module -y switch-to php:remi-8.2    # remi-8.2 に切り替え

dnf module list php                     # 状況確認
# [check] => remi-8.2 に [e] と [i] が表示されていること

php -v                                  # PHP バージョン確認
# [check] => PHP 8.2.x であること
実行結果
[root@localhost ~]# dnf module list php                     # 状況確認
メタデータの期限切れの最終確認: 0:14:30 前の 2024年08月24日 19時30分31秒 に実施しました。
CentOS Stream 9 - AppStream
Name                 Stream                       Profiles                                       Summary
php                  8.1                          common [d], devel, minimal                     PHP scripting language
php                  8.2                          common [d], devel, minimal                     PHP scripting language

Remi's Modular repository for Enterprise Linux 9 - x86_64
Name                 Stream                       Profiles                                       Summary
php                  remi-7.4                     common [d], devel, minimal                     PHP scripting language
php                  remi-8.0                     common [d], devel, minimal                     PHP scripting language
php                  remi-8.1                     common [d], devel, minimal                     PHP scripting language
php                  remi-8.2                     common [d], devel, minimal                     PHP scripting language
php                  remi-8.3 [e]                 common [d] [i], devel, minimal                 PHP scripting language

ヒント: [d]efault, [e]nabled, [x]disabled, [i]nstalled
[root@localhost ~]# # [check] => remi-8.3 に [e] と [i] が表示されていること
[root@localhost ~]# 
[root@localhost ~]# dnf module -y switch-to php:remi-8.2    # remi-8.2 に切り替え
メタデータの期限切れの最終確認: 0:14:47 前の 2024年08月24日 19時30分31秒 に実施しました。
依存関係が解決しました。
======================================================================================================================================
 パッケージ                      アーキテクチャー          バージョン                           リポジトリー                    サイズ
======================================================================================================================================
ダウングレード:
 php-cli                         x86_64                    8.2.22-1.el9.remi                    remi-modular                    5.4 M
 php-common                      x86_64                    8.2.22-1.el9.remi                    remi-modular                    857 k
 php-fpm                         x86_64                    8.2.22-1.el9.remi                    remi-modular                    1.8 M
 php-mbstring                    x86_64                    8.2.22-1.el9.remi                    remi-modular                    576 k
 php-mysqlnd                     x86_64                    8.2.22-1.el9.remi                    remi-modular                    219 k
 php-pdo                         x86_64                    8.2.22-1.el9.remi                    remi-modular                    118 k
 php-xml                         x86_64                    8.2.22-1.el9.remi                    remi-modular                    216 k
モジュールストリームの切り替え中:
 php                                                       remi-8.3 -> remi-8.2

トランザクションの概要
======================================================================================================================================
ダウングレード  7 パッケージ

ダウンロードサイズの合計: 9.2 M
パッケージのダウンロード:

<<<<<<<<<<<<<<< 省略 >>>>>>>>>>>>>>>

ダウングレード済み:
  php-cli-8.2.22-1.el9.remi.x86_64              php-common-8.2.22-1.el9.remi.x86_64          php-fpm-8.2.22-1.el9.remi.x86_64
  php-mbstring-8.2.22-1.el9.remi.x86_64         php-mysqlnd-8.2.22-1.el9.remi.x86_64         php-pdo-8.2.22-1.el9.remi.x86_64
  php-xml-8.2.22-1.el9.remi.x86_64

完了しました!
[root@localhost ~]#
[root@localhost ~]#
[root@localhost ~]# dnf module list php                     # 状況確認
メタデータの期限切れの最終確認: 0:15:23 前の 2024年08月24日 19時30分31秒 に実施しました。
CentOS Stream 9 - AppStream
Name                 Stream                       Profiles                                       Summary
php                  8.1                          common [d], devel, minimal                     PHP scripting language
php                  8.2                          common [d], devel, minimal                     PHP scripting language

Remi's Modular repository for Enterprise Linux 9 - x86_64
Name                 Stream                       Profiles                                       Summary
php                  remi-7.4                     common [d], devel, minimal                     PHP scripting language
php                  remi-8.0                     common [d], devel, minimal                     PHP scripting language
php                  remi-8.1                     common [d], devel, minimal                     PHP scripting language
php                  remi-8.2 [e]                 common [d] [i], devel, minimal                 PHP scripting language
php                  remi-8.3                     common [d], devel, minimal                     PHP scripting language

ヒント: [d]efault, [e]nabled, [x]disabled, [i]nstalled
[root@localhost ~]# # [check] => remi-8.2 に [e] と [i] が表示されていること
[root@localhost ~]#
[root@localhost ~]# php -v                                  # PHP バージョン確認
PHP 8.2.22 (cli) (built: Jul 30 2024 11:47:12) (NTS gcc x86_64)
Copyright (c) The PHP Group
Zend Engine v4.2.22, Copyright (c) Zend Technologies
[root@localhost ~]# # [check] => PHP 8.2.x であること

ブラウザをリロードすると Web 画面に表示される PHP バージョンも 8.2 に変更されています。

次に、インストール時の手順に近い方法でバージョン変更を実施してみます。
PHP 8.2(remi-8.2) から PHP 8.0(8.0) に切り替えます。

Bash
dnf module list php                     # 状況確認
# [check] => remi-8.2 に [e] と [i] が表示されていること

dnf module -y reset php                 # PHP モジュールを初期状態(有効でも無効でもない状態)にリセット
dnf module -y enable php:8.0            # 8.0 ストリームの PHP モジュールを有効化
dnf module -y install php               # 8.0 のインストール

dnf module list php                     # 状況確認
# [check] => 8.0 に [e] と [i] が表示されていること
実行結果
[root@localhost ~]# dnf module list php                     # 状況確認
メタデータの期限切れの最終確認: 0:26:56 前の 2024年08月24日 19時30分31秒 に実施しました。
CentOS Stream 9 - AppStream
Name                 Stream                       Profiles                                       Summary
php                  8.1                          common [d], devel, minimal                     PHP scripting language
php                  8.2                          common [d], devel, minimal                     PHP scripting language

Remi's Modular repository for Enterprise Linux 9 - x86_64
Name                 Stream                       Profiles                                       Summary
php                  remi-7.4                     common [d], devel, minimal                     PHP scripting language
php                  remi-8.0                     common [d], devel, minimal                     PHP scripting language
php                  remi-8.1                     common [d], devel, minimal                     PHP scripting language
php                  remi-8.2 [e]                 common [d] [i], devel, minimal                 PHP scripting language
php                  remi-8.3                     common [d], devel, minimal                     PHP scripting language

ヒント: [d]efault, [e]nabled, [x]disabled, [i]nstalled
[root@localhost ~]# # [check] => remi-8.2 に [e] と [i] が表示されていること
[root@localhost ~]#
[root@localhost ~]# dnf module -y reset php                 # PHP モジュールを初期状態(有効でも無効でもない状態)にリセット
メタデータの期限切れの最終確認: 0:27:03 前の 2024年08月24日 19時30分31秒 に実施しました。
依存関係が解決しました。
======================================================================================================================================
 パッケージ                      アーキテクチャー               バージョン                      リポジトリー                    サイズ
======================================================================================================================================
モジュールプロファイルの無効化中:
 php/common
モジュールの再設定中:
 php

トランザクションの概要
======================================================================================================================================

完了しました!
[root@localhost ~]#
[root@localhost ~]# dnf module -y enable php:8.1            # 8.1 ストリームの PHP モジュールを有効化
メタデータの期限切れの最終確認: 0:27:40 前の 2024年08月24日 19時30分31秒 に実施しました。
依存関係が解決しました。
======================================================================================================================================
 パッケージ                      アーキテクチャー               バージョン                      リポジトリー                    サイズ
======================================================================================================================================
モジュールストリームの有効化中:
 php                                                            8.1

トランザクションの概要
======================================================================================================================================

完了しました!
[root@localhost ~]#
[root@localhost ~]#
[root@localhost ~]#
[root@localhost ~]#
[root@localhost ~]#
[root@localhost ~]# dnf module -y install php               # 8.1 のインストール
メタデータの期限切れの最終確認: 0:28:17 前の 2024年08月24日 19時30分31秒 に実施しました。
依存関係が解決しました。
======================================================================================================================================
 パッケージ                   アーキテクチャー       バージョン                                       リポジトリー              サイズ
======================================================================================================================================
ダウングレード:
 php-cli                      x86_64                 8.1.27-1.module_el9+790+4812d76d                 appstream                 3.5 M
 php-common                   x86_64                 8.1.27-1.module_el9+790+4812d76d                 appstream                 692 k
 php-fpm                      x86_64                 8.1.27-1.module_el9+790+4812d76d                 appstream                 1.8 M
 php-mbstring                 x86_64                 8.1.27-1.module_el9+790+4812d76d                 appstream                 473 k
 php-mysqlnd                  x86_64                 8.1.27-1.module_el9+790+4812d76d                 appstream                 145 k
 php-pdo                      x86_64                 8.1.27-1.module_el9+790+4812d76d                 appstream                  83 k
 php-xml                      x86_64                 8.1.27-1.module_el9+790+4812d76d                 appstream                 146 k
モジュールプロファイルのインストール中:
 php/common

トランザクションの概要
======================================================================================================================================
ダウングレード  7 パッケージ

ダウンロードサイズの合計: 6.8 M
パッケージのダウンロード:

<<<<<<<<<<<<<<< 省略 >>>>>>>>>>>>>>>

ダウングレード済み:
  php-cli-8.1.27-1.module_el9+790+4812d76d.x86_64                   php-common-8.1.27-1.module_el9+790+4812d76d.x86_64
  php-fpm-8.1.27-1.module_el9+790+4812d76d.x86_64                   php-mbstring-8.1.27-1.module_el9+790+4812d76d.x86_64
  php-mysqlnd-8.1.27-1.module_el9+790+4812d76d.x86_64               php-pdo-8.1.27-1.module_el9+790+4812d76d.x86_64
  php-xml-8.1.27-1.module_el9+790+4812d76d.x86_64

完了しました!
[root@localhost ~]#
[root@localhost ~]#
[root@localhost ~]# dnf module list php                     # 状況確認
メタデータの期限切れの最終確認: 0:28:32 前の 2024年08月24日 19時30分31秒 に実施しました。
CentOS Stream 9 - AppStream
Name                  Stream                    Profiles                                        Summary
php                   8.1 [e]                   common [d] [i], devel, minimal                  PHP scripting language
php                   8.2                       common [d], devel, minimal                      PHP scripting language

Remi's Modular repository for Enterprise Linux 9 - x86_64
Name                  Stream                    Profiles                                        Summary
php                   remi-7.4                  common [d], devel, minimal                      PHP scripting language
php                   remi-8.0                  common [d], devel, minimal                      PHP scripting language
php                   remi-8.1                  common [d], devel, minimal                      PHP scripting language
php                   remi-8.2                  common [d], devel, minimal                      PHP scripting language
php                   remi-8.3                  common [d], devel, minimal                      PHP scripting language

ヒント: [d]efault, [e]nabled, [x]disabled, [i]nstalled
[root@localhost ~]# # [check] => 8.1 に [e] と [i] が表示されていること
[root@localhost ~]#
[root@localhost ~]# php -v
PHP 8.1.27 (cli) (built: Dec 19 2023 20:35:55) (NTS gcc x86_64)
Copyright (c) The PHP Group
Zend Engine v4.1.27, Copyright (c) Zend Technologies
[root@localhost ~]#

ブラウザをリロードすると Web 画面に表示される PHP バージョンも 8.1 に変更されています。

まとめ

本記事では、PHP 8.3 を CentOS Stream 9 にインストールし、ブラウザから PHP の動作確認を行いました。
基本的な流れをイメージ頂けていれば幸いです。

最後までお読みくださり、ありがとうございました。