PHPを8.0から8.2にdnfでアップグレード

PHP8.0の公式サポートが終了したのでPHP8.2にアップグレードしたときの覚書。

環境: CentOS Stream 8

WordPressがサポートしているphpバージョンも確認しておく。
参考: PHP Compatibility and WordPress Versions – Make WordPress Core


1.PHP8.2をdnfモジュール一覧からアップグレード

dnf moduleの中にphp8.2が追加されていた。
前の記事を参考に。
参考: CentOS Stream 8のPHPを7.4から8.0にアップグレード

現在のモジュールを確認
# dnf module list php

CentOS Stream 8 - AppStream
Name                   Stream  
php                    7.2 [d] 
php                    7.3     
php                    7.4     
php                    8.0 [e] 
php                    8.2     

php8.0から8.2に切り替える。
phpを初期状態にresetしてphp8.2を有効にする。
# dnf module reset php
# dnf module enable php:8.2
# dnf --allowerasing distro-sync

確認
# php --version

PHP Warning:  PHP Startup: imagick: Unable to initialize module
Module compiled with module API=20200930
PHP    compiled with module API=20220829
These options need to match
 in Unknown on line 0
PHP Warning:  PHP Startup: mecab: Unable to initialize module
Module compiled with module API=20200930
PHP    compiled with module API=20220829
These options need to match
 in Unknown on line 0
PHP 8.2.13 (cli) (built: Nov 21 2023 09:55:59) (NTS gcc x86_64)
Copyright (c) The PHP Group
Zend Engine v4.2.13, Copyright (c) Zend Technologies
    with Zend OPcache v8.2.13, Copyright (c), by Zend Technologies

imagickとmecabの再ビルドが必要。
とりあえずPHPモジュールを削除。
# cd /etc/php.d/
# rm -f imagick.ini mecab.ini

ファイル権限が変更されているので再設定
# chown nginx.www -R /var/lib/php/*

nginx用の設定ファイルはいらない
# cd /etc/nginx/conf.d/
# ls
# mv php-fpm.conf bak/

phpの設定確認
# less /etc/php-fpm.d/www.conf
# less /etc/php.ini

date.timezone = "Asia/Tokyo"
upload_max_filesize = 2M
post_max_size = 12M
memory_limit = 256M


2.php-imagickをビルドしてインストール

php-gdがあるから要らないような気もするけど一応インストールしておく。
PECL拡張ライブラリの一覧表示。
# pecl list

Installed packages, channel pecl.php.net:
=========================================
Package Version State
apcu    5.1.23  stable
imagick 3.7.0   stable
zip     1.22.3  stable

imagickをリビルド。
# pecl uninstall imagick
# pecl install imagick

拡張モジュールiniファイルを配置して再起動。
# echo "extension=imagick.so" > /etc/php.d/imagick.ini
# systemctl restart php-fpm
# php -i | grep imagick


3.php-mecabをビルドしてインストール

php8.0に対応したリポジトリがなくなっていたので、別のリポジトリに切り替える。
参考: GitHub - zaikoio/php-mecab: MeCab binding for PHP
# cd /opt/software/php-mecab/
# git remote set-url origin https://github.com/zaikoio/php-mecab.git
# git fetch origin
# git reset --hard origin/master

ビルド実行。
# cd mecab
# make clean
# phpize
# ./configure --with-mecab=/usr/local/bin/mecab-config
# make
# make test
# make install

拡張モジュールiniファイルを配置して再起動。
# echo "extension=mecab.so" > /etc/php.d/mecab.ini
# systemctl restart php-fpm
# php -i | grep mecab



【関連記事】