PHP7.4で「Uncaught Error: Class ‘ZipArchive’ not found」を対処した話
PHP7.2からPHP7.4へアップグレードした際、いままではつかえていたnew ZipArchive()を行うと、
「Uncaught Error: Class ‘ZipArchive’ not found」というエラーが発生するようになりました。
php-pecl-zipはインストール済み、/usr/lib64/zip.soも存在している状態でした。
エラー調査
パッケージのインストール確認
まず、ZipArchiveを使うためのライブラリがインストールされているかを確認
dnf list --installed php-pecl-zip
Installed Packages
php-pecl-zip.x86_64 1.18.2-1.module+el8.3.0+6678+b09f589e
インストールされているようです。
モジュールの存在確認
zip.soがphpのextensionとして読み込めるところにあるか確認します。
ll /usr/lib64/php/modules/zip.so
-rwxr-xr-x 1 root root 79760 May 19 2020 /usr/lib64/php/modules/zip.so
存在もしています。
phpで読み込まれているモジュール確認
モジュールが有効になっているか、一覧で確認します。
php -m | grep zip
すると、以下のようなWarningが表示されました。
PHP Warning: PHP Startup: Unable to load dynamic library 'zip.so' (tried: /usr/lib64/php/modules/zip.so (/usr/lib64/php/modules/zip.so: undefined symbol: zip_register_cancel_callback_with_state), /usr/lib64/php/modules/zip.so.so (/usr/lib64/php/modules/zip.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
対処
PHPを7.4にアップグレードした際、php-pecl-zipが使用するlibzipが一緒にバージョンアップしないため、上記のエラーが出ている様でした。
libzipをアップグレードします。
dnf upgrade libzip
-
前の記事
openmediavault 4から5へアップグレード 2023.07.05
-
次の記事
RockyLinux9にWireGuardを導入する 2024.01.18
Author:KMMR 投稿一覧
技術屋さんです。
普段はPHP, Perl, Ruby, Pythonなどを触っています。
AWSなどのIaaSもちょこちょこ触っているので、備忘などを書いていきます。