勉強したことのメモ

Webエンジニア / プログラマが勉強したことのメモ。

AlmaLinux8系に異なるバージョンのPHPをインストールする方法

  PHP サーバー

AlmaLinux8系&Apache2.4系の環境に異なるバージョンのPHPをインストールしたい。また、基本的にはPHP8.5で動作させ、特定のディレクトリのみPHP8.3で動作させたい。以下に対応方法をメモ。

 

環境について

VPS

今回はKAGOYA CLOUD VPSのCPU1コア / メモリ1GBプランで作業した。SSH接続は公式案内の通り以下でログインできる。

  • 接続ポート -> 22
  • ユーザ名 -> root
  • パスワード or 秘密鍵 -> インスタンス作成時に選択したもの

AlmaLinux / Apache

詳細なバージョンは以下の通り。

#AlmaLinuxのバージョン確認
cat /etc/redhat-release

#実行結果
AlmaLinux release 8.10 (Cerulean Leopard)

#Apacheのバージョン確認
httpd -v

#実行結果
Server version: Apache/2.4.37 (AlmaLinux)

事前準備

過去記事を参考にApacheのインストールまで済ませた状態。必要に応じてFTPサーバもインストールする。

 

対応方法

PHPのインストール

サーバにSSH接続し、以下の通り進める。

#epelリポジトリのインストール
dnf install epel-release

#remiリポジトリのインストール
dnf install https://rpms.remirepo.net/enterprise/remi-release-8.rpm

#dnfのメタデータキャッシュを作成
dnf clean all && dnf -y makecache

#インストール可能なPHPのリストを表示
dnf module list php

PHPのリストは以下が表示された。

AlmaLinux 8 - AppStream
Name               Stream                 Profiles                                Summary                            
php                7.2 [d]                common [d], devel, minimal              PHP scripting language             
php                7.3                    common [d], devel, minimal              PHP scripting language             
php                7.4                    common [d], devel, minimal              PHP scripting language             
php                8.0                    common [d], devel, minimal              PHP scripting language             
php                8.2                    common [d], devel, minimal              PHP scripting language             

Remi's Modular repository for Enterprise Linux 8 - x86_64
Name               Stream                 Profiles                                Summary                            
php                remi-7.2               common [d], devel, minimal              PHP scripting language             
php                remi-7.3               common [d], devel, minimal              PHP scripting language             
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             
php                remi-8.4               common [d], devel, minimal              PHP scripting language             
php                remi-8.5               common [d], devel, minimal              PHP scripting language

引き続き以下の通り進める。

#PHP8.5を指定
dnf module reset php && dnf -y module enable php:remi-8.5

#再度インストール可能なPHPのリストを表示
dnf module list php

するとremi-8.5が選択された状態になる筈。

AlmaLinux 8 - AppStream
Name              Stream                    Profiles                               Summary                           
php               7.2 [d]                   common [d], devel, minimal             PHP scripting language            
php               7.3                       common [d], devel, minimal             PHP scripting language            
php               7.4                       common [d], devel, minimal             PHP scripting language            
php               8.0                       common [d], devel, minimal             PHP scripting language            
php               8.2                       common [d], devel, minimal             PHP scripting language            

Remi's Modular repository for Enterprise Linux 8 - x86_64
Name              Stream                    Profiles                               Summary                           
php               remi-7.2                  common [d], devel, minimal             PHP scripting language            
php               remi-7.3                  common [d], devel, minimal             PHP scripting language            
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            
php               remi-8.4                  common [d], devel, minimal             PHP scripting language            
php               remi-8.5 [e]              common [d], devel, minimal             PHP scripting language

引き続きインストール作業を進める。

#PHP8.5とモジュールをインストール
dnf -y install php php-cli php-fpm php-devel php-pear php-curl php-mysqlnd php-gd php-opcache php-zip php-intl php-common php-bcmath php-imagick php-xmlrpc php-json php-readline php-memcached php-redis php-mbstring php-apcu php-xml php-dom php-redis php-memcached php-memcache php-process

#インストールされたPHPのバージョンを確認
php -v

#実行結果
PHP 8.5.9 (cli) (built: Jul 28 2026 13:06:52) (NTS gcc x86_64)

#PHP8.3とモジュールをインストール
dnf install php83 php83-php-cli php83-php-fpm php83-php-devel php83-php-pear php83-php-common php83-php-bcmath php83-php-gd php83-php-intl php83-php-mbstring php83-php-mysqlnd php83-php-opcache php83-php-process php83-php-xml php83-php-xmlrpc php83-php-zip php83-php-pecl-apcu php83-php-pecl-imagick-im7 php83-php-pecl-memcache php83-php-pecl-memcached php83-php-pecl-redis

#インストールしたPHP8.3のバージョンを確認
php83 -v

#実行結果
PHP 8.3.33 (cli) (built: Jul 28 2026 17:56:10) (NTS gcc x86_64)

#PHP8.5のFPM起動
systemctl enable --now php-fpm

#PHP8.3のFPM起動
systemctl enable --now php83-php-fpm

#PHP8.3の設定ファイルを退避(競合を防ぐため)
mv /etc/httpd/conf.d/php83-php.conf /etc/httpd/conf.d/php83-php.conf.bak

ここまででPHPのインストールは完了。次はApache側の設定になる。

Apache側の設定

前提として以下ディレクトリ&PHPバージョンで動作させたい。

  • /var/www/html 以下はデフォルトのPHP8.5で動作
  • /var/www/html/php83 以下のみPHP8.3で動作

引き続きサーバにSSH接続し、以下の通り進める。

#バージョン切り替え用の設定ファイルを作成
vi /etc/httpd/conf.d/php_selector.conf

以下を記述し「:wq」で保存する。

# --------------------------------------------------
# 全体設定
# --------------------------------------------------
<Directory "/var/www/html">
    <FilesMatch \.(php|phar)$>
        SetHandler "proxy:unix:/run/php-fpm/www.sock|fcgi://localhost"
    </FilesMatch>
</Directory>

# --------------------------------------------------
# PHP8.3の設定
# --------------------------------------------------
<Directory "/var/www/html/php83">
    <FilesMatch \.(php|phar)$>
        SetHandler "proxy:unix:/var/opt/remi/php83/run/php-fpm/www.sock|fcgi://localhost"
    </FilesMatch>
</Directory>

以下の通り進める。

#設定ファイルの構文チェック
httpd -t

#以下ならOK
Syntax OK

#Apacheの再起動
systemctl restart httpd

ここまででエラーが発生していなければPHP8.5 / 8.3での動作が確認できる筈。

 

その他

異なるバージョンのPHPを導入する際の注意点

バージョン違いのソフトウェアをインストールする場合、今回だと「php83-*」のようにSCL形式(Software Collection)でインストールする必要ありとのこと。「php83-*」ではなく「php-*」形式だと上書きされ、破損する可能性があるため。

更に異なるバージョンを導入したい場合

前述のSCL形式でPHPを導入し、PHPx.xの設定ファイルを退避とApache側のphp_selector.confを追記する。

設定ファイル(php.ini)の場所

設定ファイルの場所は以下の通り。

#PHP8.5の設定ファイル
/etc/php.ini

#PHP8.3の設定ファイル
/etc/opt/remi/php83/php.ini

また、設定変更後の反映方法は以下の通り。

#PHP8.5の設定を反映する場合
systemctl restart php-fpm

#PHP8.3の設定を反映する場合
systemctl restart php83-php-fpm

 - PHP サーバー

  関連記事

ムームードメインで取得したドメインをムームードメイン側のDNSでエックスサーバを使う方法
ムームードメインで取得したドメインをムームードメイン側のDNSでエックスサーバを使う方法

ムームードメインでドメインを取得し、エックスサーバで使う場合にエックスサーバ側の ...

中国のIPアドレスをiptablesで拒否、遮断する
中国のIPアドレスをiptablesで拒否、遮断する

レンタルしているVPSの一つが最近よく落ちる。原因はどうも海外、特に中国から不正 ...

Plesk12で特定ドメインにメールが送信できない際の対応方法
Plesk12で特定ドメインにメールが送信できない際の対応方法

Plesk12を利用しているサーバで特定のドメインのみメールが送信されなかった。 ...

CockpitにGoogle Authenticatorを用いたOtp認証を導入する方法
CockpitにGoogle Authenticatorを用いたOtp認証を導入する方法

Cockpitのセキュリティ対策としてGoogle Authenticatorを ...

AlmaLlinux8でswap領域を後から追加する方法
AlmaLlinux8でswap領域を後から追加する方法

swap領域作成の際、だいぶ前にサーバに搭載されているメモリ量と同じ値(メモリ1 ...