CentOS 8 にPHP7.4をDNFでインストール

さくらのVPSにCentOS 8をインストールした覚書です。

今回は、PHPの最新版であるPHP7.4をインストールします。

CentOS 8 を dnf でそのままインストールすると PHP7.2 になります。
remi を使うことで、dnf インストールで PHP7.4 が選択可能になります。

ソースインストールではなく、 dnf インストールですので、ソースインストールをお探しの場合は下記をご覧ください。
PHP7.4.6をCentOS7にソースインストール

なお本番環境で利用される場合はここにある内容だけを鵜呑みにせずセキュリティ専門家に相談されることをお勧めします。

環境

実施日2020-05-29
サーバさくらのVPS 2G
OSCentOS 8.1
cat /etc/redhat-release
CentOS Linux release 8.1.1911 (Core)

PHP7.4のインストール

remiからインストールします。

remiをまだ設定していない場合はこちら

選択可能なバージョンを確認してみます。

dnf module list php
CentOS-8 - AppStream
Name                        Stream                          Profiles                                          Summary
php                         7.2 [d]                         common [d], devel, minimal                        PHP scripting language
php                         7.3                             common, 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

AppStream では、7.2 がデフォルトで 7.3 も可ですが、Remi では、7.4 を選択可能になっています。

ということで、PHP7.4 をインストールします。

dnf module install php:remi-7.4

余談 (必要になったときに再確認します)
▼でバージョンの切り替え

dnf module reset php:remi-7.4
dnf module install php:remi-7.3

確認

# バージョン
php -v

# php.ini の場所
php -i | grep php.ini

# php-fpm の場所
which php-fpm

# php-fpm のバージョン
php-fpm -v

php-fpm の設定

# 現在の状態を確認
systemctl status php-fpm

# 起動
systemctl start php-fpm

# 終了
systemctl stop php-fpm

# 自動起動の有効化
systemctl enable php-fpm

# 自動起動の解除
systemctl disable php-fpm

php-zip

dnf install php-zip

PHPを実行して、次のようなエラーが出た場合にインストールします。
zip機能を使わないPHPプログラムだとインストールしなくてもOKです。

PHP Fatal error:  Uncaught Error: Class 'ZipArchive' not found in ・・・

mysql

dnf install php-mysqlnd

gd

dnf install php-gd

その他

必要に応じて

dnf install php-xmlrpc
dnf install php-pecl-mcrypt
dnf install php-opcache
dnf install php-pecl-apcu
dnf install php-pecl-zip
dnf install php-pear

トラブルシューティング

mb-string でエラー

ある日、dnf を使おうとすると次のようなエラーが出てどうにもこうにもな感じになりました。

メタデータの期限切れの最終確認: 0:05:27 時間前の 2020年06月26日 02時27分57秒 に実施しました。
エラー:
 問題 1: cannot install the best update candidate for package php-mbstring-7.4.6-1.el8.remi.x86_64
  - nothing provides libonig.so.105()(64bit) needed by php-mbstring-7.4.7-1.el8.remi.x86_64
 問題 2: problem with installed package php-mbstring-7.4.6-1.el8.remi.x86_64
  - package php-mbstring-7.4.6-1.el8.remi.x86_64 requires php-common(x86-64) = 7.4.6-1.el8.remi, but none of the providers can be installed
  - cannot install both php-common-7.4.7-1.el8.remi.x86_64 and php-common-7.4.6-1.el8.remi.x86_64
  - cannot install the best update candidate for package php-common-7.4.6-1.el8.remi.x86_64
  - nothing provides libonig.so.105()(64bit) needed by php-mbstring-7.4.7-1.el8.remi.x86_64
(競合するパッケージを置き換えるには、コマンドラインに '--allowerasing' を追加してみてください または、'--skip-broken' を追加して、インストール不可のパッケージをスキップしてください または、'--nobest' を追加して、最適候補のパッケージのみを使用しないでください)
# 削除はできたけど
dnf remove php-mbstring

# インストールできなくなって
dnf install php-mbstring

# アップデートしてみても
dnf update

# インストールできなくて
dnf install php-mbstring

次のようなエラーに悩まされました。

# dnf install php-mbstring
メタデータの期限切れの最終確認: 0:12:07 時間前の 2020年06月26日 02時27分57秒 に実施しました。
エラー:
 問題: cannot install the best candidate for the job
  - nothing provides libonig.so.105()(64bit) needed by php-mbstring-7.4.7-1.el8.remi.x86_64
(インストール不可のパッケージをスキップするには、'--skip-broken' を追加してみてください または、'--nobest' を追加して、最適候補のパッケージのみを使用しないでください)

で、たどり着いたのがこちらです。

# 鬼車をインストール
yum --enablerepo=remi install oniguruma5php

# mbstring をインストール
dnf install php-mbstring