php7をphp8にバージョンアップしてみた。

前からやろうやろうと思って手つかずだったphpのバージョンを
php7からphp8に上げてみました。

OSは

# cat /etc/redhat-release
AlmaLinux release 8.4 (Electric Cheetah)

phpのバージョンは

# php -v
PHP 7.4.25 (cli) (built: Oct 19 2021 15:18:10) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies

インストールされているPHP関連のパッケージを確認

# rpm -qa | grep php php-cli.x86_64 8.1.0~RC5-1.el8.remi remi-modular
php-xml-7.4.25-1.el8.remi.x86_64 php-common.x86_64 8.1.0~RC5-1.el8.remi remi-modular
php-fedora-autoloader-1.0.1-2.el8.remi.noarch php-devel.x86_64 8.1.0~RC5-1.el8.remi remi-modular
php-json-7.4.25-1.el8.remi.x86_64 php-fpm.x86_64 8.1.0~RC5-1.el8.remi remi-modular
php-mysqlnd-7.4.25-1.el8.remi.x86_64 php-gd.x86_64 8.1.0~RC5-1.el8.remi remi-modular
php-pdo-7.4.25-1.el8.remi.x86_64 php-mbstring.x86_64 8.1.0~RC5-1.el8.remi remi-modular
php-mbstring-7.4.25-1.el8.remi.x86_64 php-mysqlnd.x86_64 8.1.0~RC5-1.el8.remi remi-modular
php-fpm-7.4.25-1.el8.remi.x86_64 php-pdo.x86_64 8.1.0~RC5-1.el8.remi remi-modular
php-pecl-mysql-1.0.0-0.23.20190415.d7643af.el8.remi.7.4.x86_64 php-pecl-mysql.x86_64 1.0.0-0.25.20210423.ca514c4.el8.remi.8.1 remi-modular
php-common-7.4.25-1.el8.remi.x86_64 php-pecl-ssh2.x86_64 1.3.1-2.el8.remi.8.1 remi-modular
php-devel-7.4.25-1.el8.remi.x86_64 php-pecl-zip.x86_64 1.20.0-1.el8.remi.8.1 remi-modular
php-process-7.4.25-1.el8.remi.x86_64 php-process.x86_64 8.1.0~RC5-1.el8.remi remi-modular
php-pecl-ssh2-1.3.1-1.el8.remi.7.4.x86_64 php-xml.x86_64 8.1.0~RC5-1.el8.remi remi-modular
oniguruma5php-6.9.7.1-1.el8.remi.x86_64 Obsoleting Packages
php-pecl-zip-1.20.0-1.el8.remi.7.4.x86_64 php-common.x86_64 8.1.0~RC4-1.el8.remi remi-modular
php-pear-1.10.13-1.el8.remi.noarch php-json.x86_64 7.4.25-1.el8.remi @remi-modular
php-cli-7.4.25-1.el8.remi.x86_64 php-common.x86_64 8.1.0~RC5-1.el8.remi remi-modular
php-gd-7.4.25-1.el8.remi.x86_64 php-json.x86_64

現在のサーバーでphp8が使えるか確認

# dnf module list php
Last metadata expiration check: 0:06:17 ago on Fri 29 Oct 2021 02:57:52 PM JST.
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

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 [e] common [d] [i], 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

Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled

8.1が使えるようです。

一度phpモジュールをリセットして

# dnf module reset php
Last metadata expiration check: 0:07:25 ago on Fri 29 Oct 2021 02:57:52 PM JST.
Dependencies resolved.
================================================================================
Package Architecture Version Repository Size
================================================================================
Disabling module profiles:
php/common
Resetting modules:
php

Transaction Summary
================================================================================

Is this ok [y/N]: y
Complete!

remi-8.1を有効にします。

# dnf module enable php:remi-8.1
Last metadata expiration check: 0:09:34 ago on Fri 29 Oct 2021 02:57:52 PM JST.
Dependencies resolved.
================================================================================
Package Architecture Version Repository Size
================================================================================
Enabling module streams:
php remi-8.1

Transaction Summary
================================================================================

Is this ok [y/N]: y
Complete!

確認

# dnf module list php
Last metadata expiration check: 0:01:43 ago on Fri 29 Oct 2021 03:15:51 PM JST.
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

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 [e] common [d], devel, minimal PHP scripting language

Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled

remi-8.1に[e]が付いてます。

check-updateで確認です。

# dnf check-update
Last metadata expiration check: 0:02:03 ago on Fri 29 Oct 2021 03:15:51 PM JST.

php-cli.x86_64 8.1.0~RC5-1.el8.remi remi-modular
php-common.x86_64 8.1.0~RC5-1.el8.remi remi-modular
php-devel.x86_64 8.1.0~RC5-1.el8.remi remi-modular
php-fpm.x86_64 8.1.0~RC5-1.el8.remi remi-modular
php-gd.x86_64 8.1.0~RC5-1.el8.remi remi-modular
php-mbstring.x86_64 8.1.0~RC5-1.el8.remi remi-modular
php-mysqlnd.x86_64 8.1.0~RC5-1.el8.remi remi-modular
php-pdo.x86_64 8.1.0~RC5-1.el8.remi remi-modular
php-pecl-mysql.x86_64 1.0.0-0.25.20210423.ca514c4.el8.remi.8.1 remi-modular
php-pecl-ssh2.x86_64 1.3.1-2.el8.remi.8.1 remi-modular
php-pecl-zip.x86_64 1.20.0-1.el8.remi.8.1 remi-modular
php-process.x86_64 8.1.0~RC5-1.el8.remi remi-modular
php-xml.x86_64 8.1.0~RC5-1.el8.remi remi-modular
Obsoleting Packages
php-common.x86_64 8.1.0~RC4-1.el8.remi remi-modular
php-json.x86_64 7.4.25-1.el8.remi @remi-modular
php-common.x86_64 8.1.0~RC5-1.el8.remi remi-modular
php-json.x86_64 7.4.25-1.el8.remi @remi-modular

この環境ではremi-modular.repoを使っています。
php8.1にあがるようです。

それでは上げてみます。

# dnf -y update
Last metadata expiration check: 0:02:18 ago on Fri 29 Oct 2021 03:15:51 PM JST.
Dependencies resolved.

長いので略~
update中に警告が・・
PHP Warning: PHP Startup: Unable to load dynamic library ‘imagick.so’ (tried: /usr/lib64/php/modules/imagick.so (/usr/lib64/php/modules/imagick.so: undefined symbol: instanceof_function_ex), /usr/lib64/php/modules/imagick.so.so (/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0

Upgraded:
php-cli-8.1.0~RC5-1.el8.remi.x86_64 php-common-8.1.0~RC5-1.el8.remi.x86_64
php-devel-8.1.0~RC5-1.el8.remi.x86_64 php-fpm-8.1.0~RC5-1.el8.remi.x86_64
php-gd-8.1.0~RC5-1.el8.remi.x86_64 php-mbstring-8.1.0~RC5-1.el8.remi.x86_64
php-mysqlnd-8.1.0~RC5-1.el8.remi.x86_64 php-pdo-8.1.0~RC5-1.el8.remi.x86_64
php-pecl-mysql-1.0.0-0.25.20210423.ca514c4.el8.remi.8.1.x86_64 php-pecl-ssh2-1.3.1-2.el8.remi.8.1.x86_64
php-pecl-zip-1.20.0-1.el8.remi.8.1.x86_64 php-process-8.1.0~RC5-1.el8.remi.x86_64
php-xml-8.1.0~RC5-1.el8.remi.x86_64

Complete!

Imagickのエラーが出てますが取り合えず完了
エラーの内容からするとupdateでなくなってしまったようなので入れ直してみます。

php-pecl-imagickをインストール

# dnf install php-pecl-imagick
しかし、警告が

PHP Warning: Module “imagick” is already loaded in Unknown on line 0

既に読み込んでいると言っているのでサーバーを見てみると

/etc/php.ini

/etc/php.d/40-imagick.ini

に同じimagick.soを読み込む設定がされていたので片方をコメントアウト

;extension=imagick.so

php-fpmを再起動
# systemctl restart php-fpm

警告も消えupdate完了です。
しかし、php8は関数が無くなったりしてるので古いphpで動いていたサイトは注意が必要です。
wordpressですと、updateがかかってないテーマやプラグインを使っている場合は要注意です。
僕もはまりました。

タグ , . ブックマークする パーマリンク.

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です