CentOS 8 で、PHP7.4 から PHP8.0に上げた時のメモと、動かなくなったWebアプリケーションの対処のメモです。
PHP8.0はパフォーマンスがかなり上がっているということで、気になっていました。
ただ、remiリポジトリを使う必要があるので、避けていましたが、Nextcloudが重くなってきていたため、試す事にしました。
Remiリポジトリ追加
# rpm -ivh http://rpms.remirepo.net/enterprise/remi-release-8.rpm
モジュールストリーム変更
# dnf module list php GPG 鍵 0x5F11735A をインポート中: (略) これでよろしいですか? [y/N]: y CentOS Linux 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 [e] common [d] [i], 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 ヒント: [d]efault, [e]nabled, [x]disabled, [i]nstalled # dnf module enable php:remi-8.0 依存関係が解決しました。 エラー: モジュールの有効なストリームを切り替えることはできません。 モジュールからインストールされた全てのコンテンツを削除し、 'dnf module reset <module_name>' コマンドを使用してリセットすることが推奨されます。モジュールのリセット後、他のストリームをインストール可能です。 # dnf module reset php ======================================================================================================================== パッケージ アーキテクチャー バージョン リポジトリー サイズ ======================================================================================================================== モジュールプロファイルの無効化中: php/common モジュールの再設定中: php トランザクションの概要 ======================================================================================================================== これでよろしいですか? [y/N]: y 完了しました! # dnf module enable php:remi-8.0 依存関係が解決しました。 ======================================================================================================================== パッケージ アーキテクチャー バージョン リポジトリー サイズ ======================================================================================================================== モジュールストリームの有効化中: php remi-8.0 トランザクションの概要 ======================================================================================================================== これでよろしいですか? [y/N]: y 完了しました! # dnf module list php CentOS Linux 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 [e] common [d], devel, minimal PHP scripting language php remi-8.1 common [d], devel, minimal PHP scripting language ヒント: [d]efault, [e]nabled, [x]disabled, [i]nstalled
PHP8.0にアップデート
# dnf update ======================================================================================================================== パッケージ アーキテクチャー バージョン リポジトリー サイズ ======================================================================================================================== アップグレード: libzip x86_64 1.8.0-1.el8.remi remi-modular 69 k php x86_64 8.0.12-1.el8.remi remi-modular 1.6 M php-bcmath x86_64 8.0.12-1.el8.remi remi-modular 87 k php-cli x86_64 8.0.12-1.el8.remi remi-modular 4.7 M php-common x86_64 8.0.12-1.el8.remi remi-modular 1.2 M 置き換え php-json.x86_64 7.4.6-4.module_el8.3.0+434+2ab5050a php-devel x86_64 8.0.12-1.el8.remi remi-modular 1.2 M php-fpm x86_64 8.0.12-1.el8.remi remi-modular 1.6 M php-gd x86_64 8.0.12-1.el8.remi remi-modular 102 k php-gmp x86_64 8.0.12-1.el8.remi remi-modular 88 k php-intl x86_64 8.0.12-1.el8.remi remi-modular 239 k php-ldap x86_64 8.0.12-1.el8.remi remi-modular 97 k php-mbstring x86_64 8.0.12-1.el8.remi remi-modular 525 k php-mysqlnd x86_64 8.0.12-1.el8.remi remi-modular 262 k php-opcache x86_64 8.0.12-1.el8.remi remi-modular 768 k php-pdo x86_64 8.0.12-1.el8.remi remi-modular 156 k php-pear noarch 1:1.10.13-1.el8.remi remi-modular 366 k php-pecl-apcu x86_64 5.1.21-1.el8.remi.8.0 remi-modular 80 k php-pecl-zip x86_64 1.20.0-1.el8.remi.8.0 remi-modular 72 k php-process x86_64 8.0.12-1.el8.remi remi-modular 106 k php-xml x86_64 8.0.12-1.el8.remi remi-modular 238 k 依存関係のインストール: libicu69 x86_64 69.1-1.el8.remi remi-safe 9.6 M libsodium x86_64 1.0.18-2.el8 epel 162 k oniguruma5php x86_64 6.9.7.1-1.el8.remi remi-safe 210 k 弱い依存関係のインストール: php-fedora-autoloader noarch 1.0.1-2.el8.remi remi-safe 13 k php-sodium x86_64 8.0.12-1.el8.remi remi-modular 94 k トランザクションの概要 ======================================================================================================================== インストール 5 パッケージ アップグレード 20 パッケージ ダウンロードサイズの合計: 24 M これでよろしいですか? [y/N]: y GPG 鍵 0x5F11735A をインポート中: (略) これでよろしいですか? [y/N]: y (略) 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
Warningが出ましたが、php-imagickがなかったようなので、インストールします。
ついでにNextcloudの高速化のために、php-redisもインストールしました。
# dnf install php-redis php-imagick ======================================================================================================================== パッケージ アーキテクチャー バージョン リポジトリー サイズ ======================================================================================================================== インストール: php-pecl-imagick-im6 x86_64 3.5.1-3.el8.remi.8.0 remi-modular 186 k php-pecl-redis5 x86_64 5.3.4-1.el8.remi.8.0 remi-modular 267 k 依存関係のインストール: ImageMagick6-libs x86_64 1:6.9.12.29-1.el8.remi remi-safe 2.4 M liblqr-1 x86_64 0.4.2-11.el8.remi remi-safe 51 k liblzf x86_64 3.6-16.el8 epel 28 k php-pecl-igbinary x86_64 3.2.6-1.el8.remi.8.0 remi-modular 160 k php-pecl-msgpack x86_64 2.1.2-1.el8.remi.8.0 remi-modular 65 k トランザクションの概要 ======================================================================================================================== インストール 7 パッケージ ダウンロードサイズの合計: 3.2 M インストール後のサイズ: 11 M これでよろしいですか? [y/N]: y (略) PHP Warning: Module "imagick" is already loaded in Unknown on line 0
今度は、imagickが既にロードされていると出ました。
# ls /etc/php.d/ 10-opcache.ini 20-exif.ini 20-intl.ini 20-simplexml.ini 20-xml.ini 40-apcu.ini 10-opcache.ini.rpmnew 20-fileinfo.ini 20-ldap.ini 20-sockets.ini 20-xmlwriter.ini 40-apcu.ini.rpmnew 20-bcmath.ini 20-ftp.ini 20-mbstring.ini 20-sodium.ini 20-xsl.ini 40-igbinary.ini 20-bz2.ini 20-gd.ini 20-mysqlnd.ini 20-sqlite3.ini 30-mysqli.ini 40-imagick.ini 20-calendar.ini 20-gettext.ini 20-pdo.ini 20-sysvmsg.ini 30-pdo_mysql.ini 40-msgpack.ini 20-ctype.ini 20-gmp.ini 20-phar.ini 20-sysvsem.ini 30-pdo_sqlite.ini 50-redis.ini 20-curl.ini 20-iconv.ini 20-posix.ini 20-sysvshm.ini 30-xmlreader.ini opcache-default.blacklist 20-dom.ini 20-imagick.ini 20-shmop.ini 20-tokenizer.ini 30-zip.ini
dnfにより、40-imagick.iniが追加され、20-imagick.iniと重複していました。片方を削除しておきます。
rm /etc/php.d/20-imagick.ini rm: 通常ファイル '/etc/php.d/20-imagick.ini' を削除しますか? y
# systemctl restart php-fpm
Nextcloud
ログインできない
ログインしようとしても、ログイン画面から変わりません。
いつもの事ですが、以下ディレクトリにNginxがアクセスできるようにします。
# chown -R nginx. /var/lib/php/session/
RedisのインストールとNextcloudで有効化
# dnf install redis ============================================================================================================================= パッケージ アーキテクチャー バージョン リポジトリー サイズ ============================================================================================================================= インストール: redis x86_64 5.0.3-5.module_el8.4.0+955+7126e393 appstream 927 k モジュールストリームの有効化中: redis 5 トランザクションの概要 ============================================================================================================================= インストール 1 パッケージ ダウンロードサイズの合計: 927 k インストール後のサイズ: 3.2 M これでよろしいですか? [y/N]: y # systemctl enable redis.service # systemctl start redis.service
赤字部分を追加
# vi /var/www/html/nextcloud/config/config.php
(略)
'memcache.local' => '\OC\Memcache\APCu',
'memcache.distributed' => '\OC\Memcache\Redis',
'memcache.locking' => '\OC\Memcache\Redis',
'redis' => array(
'host' => 'localhost',
'port' => 6379,
),
'default_phone_region' => 'JP',
);
rep2
今まで使っていたp2-phpが、PHP8.0に対応しておらず、500エラーとなっていました。
PHP8.xに対応したgitを使いました。
現状のp2-phpを退避
# cd /var/www/html/ # mv rep2-php/ /root/
PHP8 対応p2-phpをインストール
# git clone https://github.com/mikoim/p2-php.git # cd rep2-php/ # curl -O https://getcomposer.org/download/1.10.19/composer.phar # php -d detect_unicode=0 composer.phar install
データのリストア
# cp -rf /root/p2-php/data/ /var/www/html/p2-php/
nginxにアクセス権の付与
# chown nginx. -R /var/www/html/p2-php/