phpを7.4からphp8.1にアップグレードした

CentOS7

php7.4のセキュリティサポートが2022年11月28日に終了したので、phpのバージョンを8.1にアップグレードしました

バージョンの選定

候補として、8.0、8.1、8.2の3通りありました
8.0は、2023年11月26日にセキュリティサポートが終了してしまうため、すぐにアップグレードが必要になってしまうので除外しました
8.2はリリースされたばかりで、Wordpressが対応していない可能性や安定性を考慮し、やめたほうがよいという判断で8.1にアップグレードすることを決めました

WordPressとの互換性を事前に確認

WordPress自体は8.1に対応していますが、使用しているテーマやプラグインがphp8.1に対応しているか事前に調べておいたほうが良いです
私はテーマにLION BLOGを使用していたのですが、対応しておらずアップグレード後にブログが見れなくなってしまったので一度元のバージョンにダウングレードする羽目になりました
その際LION BLOGからCocoonにテーマを変更してますので、良ければそちらもご参照ください

php7.4をアンインストール

①php関連パッケージを確認する

yum list installed php*

後でphpインストールする際に使用するので、表示された結果はメモ帳などにメモしておきます

②php.inのバックアップを取得する

find / -name "php.ini" -ls

912976   64 -rw-r--r--   1 root     root        63250 11月  1 16:23 /etc/php.ini
cp -a /etc/php.ini{,.bk}

③phpをアンインストールする

yum remove php*

④remi-php74リポジトリが有効になっている場合は、disableにする

vi /etc/yum.repos.d/remi-php74.repo

[remi-php74]
name=Remi's PHP 7.4 RPM repository for Enterprise Linux 7 - $basearch
#baseurl=http://rpms.remirepo.net/enterprise/7/php74/$basearch/
#mirrorlist=https://rpms.remirepo.net/enterprise/7/php74/httpsmirror
mirrorlist=http://cdn.remirepo.net/enterprise/7/php74/mirror
enabled=1
↓
enabled=0

php8.1をインストール

①epelリポジトリのアップデートを確認する

yum update epel-release

②remiのリポジトリにphp8.1があることを確認する

ll /etc/yum.repos.d/ | grep remi-

-rw-r--r-- 1 root root 1314 12月 12 14:45 remi-php81.repo

③php関連パッケージは自動でバージョン8.1が入るように、remi-php81リポジトリを有効にする

vi /etc/yum.repos.d/remi-php81.repo

[remi-php81]
name=Remi's PHP 8.1 RPM repository for Enterprise Linux 7 - $basearch
#baseurl=http://rpms.remirepo.net/enterprise/7/php81/$basearch/
#mirrorlist=https://rpms.remirepo.net/enterprise/7/php81/httpsmirror
mirrorlist=http://cdn.remirepo.net/enterprise/7/php81/mirror
enabled=0
↓
enabled=1

④事前に取得しておいたphp関連パッケージのリストを参考に、php8.1をインストールする

yum install --enablerepo=epel php php-fpm phpMyAdmin

この機会に不要なパッケージは減らしておきたかったので、インストール対象を最低限にしました
webサーバーがnginxなのでphp-fpmが必要なのと、phpMyAdminを使用するのでphpMyAdminをインストールしてます

④phpのバージョンが8.1になっていることを確認します

php -v

PHP 8.1.13 (cli) (built: Nov 22 2022 14:42:07) (NTS gcc x86_64)
Copyright (c) The PHP Group
Zend Engine v4.1.13, Copyright (c) Zend Technologies

⑤以下のファイルをdiffツールなどで比較する

/etc/php.ini
/etc/php.ini.bk

bk側との差異があり、それを反映させたい場合はphp.iniを編集します
編集後は、webサーバー(apacheやnginx)の再起動をしてください

nginxで使用する場合の設定

webサーバーをnginxで構築しているのでphp-fpm関連の設定が必要になります

①以下のファイルをdiffツールなどで比較する

/etc/php-fpm.d/www.conf
/etc/php-fpm.d/www.conf.rpmsave

rpmsaveはphp7.4をアンインストールした時に作成されたファイルです
アップグレードすると、設定項目が変わってたりすることもありますが、今回は自分が設定変更した箇所以外に差異がなかったので、設定項目の変更はなさそうです
差異があった部分をもとに、www.confを編集していきます

④www.confを編集する

vi /etc/php-fpm.d/www.conf

;user = apache	
↓
user = nginx

;group = apache
↓
group = nginx

;listen = 127.0.0.1:9000
↓
listen = /var/run/php-fpm/php-fpm.sock

;listen.owner = nobody
↓
listen.owner = nginx

;listen.group = nobody
↓
listen.group = nginx

;php_value[session.save_path]    = /var/lib/php/session
↓
php_value[session.save_path]    = /var/lib/php/nginx_session

php_value[session.save_path]はデフォルトで運用している場合は変更なしで大丈夫です
phpアップデートの度にパーミッション設定が必要になるのが面倒で、私の環境では意図的に変更しています
詳細は下記に記載しています

④sessionのパーミッションを変更

ll /var/lib/php

drwxrwx--- 2 nginx nginx  4096 12月 13 14:02 nginx_session
drwxrwx--- 2 root  apache 4096 11月 23 01:21 opcache
drwxrwx--- 2 root  apache 4096 11月 23 01:21 session
drwxrwx--- 2 root  apache 4096 11月 23 01:21 wsdlcache

sessionのパスが、デフォルトの/var/lib/php/sessionの場合は所有者の変更が必要です

chown -R nginx. /var/lib/php/session
ll /var/lib/php

drwxrwx--- 2 nginx nginx  4096 12月 13 14:02 nginx_session
drwxrwx--- 2 root  apache 4096 11月 23 01:21 opcache
drwxrwx--- 2 nginx nginx  4096 11月 23 01:21 session
drwxrwx--- 2 root  apache 4096 11月 23 01:21 wsdlcache

④nginxおよびphp-fpmの再起動と自動有効化

systemctl restart php-fpm
systemctl enable php-fpm
systemctl restart nginx

④WordPressに接続できるか試す

参考

https://onoredekaiketsu.com/upgrade-to-php-8-0/
https://takkaaaaa.com/php-update-7-4to8-1/

コメント

タイトルとURLをコピーしました