# Exception: Class 'ZipArchive' not found

Exception: Class 'ZipArchive' not found

PHPExcel 使ってエクセル操作している時に ZipArchive class がないと怒られましたので、PHPExcel と ZipArchive について調べました。

環境

  • CentOS 7
  • PHP 7.4
  • PHPExcel 1.8

OS バージョン確認

cat /etc/redhat-release
# CentOS Linux release 7.9.2009 (Core)

ソース

$excel = PHPExcel_IOFactory::createReader('Excel2007');
$file = $excel->load($filepath);

PHP バージョン確認

php -v
# PHP 7.4.23 (cli) (built: Aug 24 2021 16:33:30) ( NTS )
# Copyright (c) The PHP Group
# Zend Engine v3.4.0, Copyright (c) Zend Technologies

# 原因 & 解決

ZipArchive class 使うには PHP は zip モジュールが必要で、なければエラーになります。

php 7.4 の zip モジュールインストール

yum -y install php74-pecl-zip

モジュール確認

php -m
# [PHP Modules]
# bz2
# calendar
# Core
# ctype
# curl
# date
# dom
# exif
# fileinfo
# filter
# ftp
# gd
# gettext
# hash
# iconv
# json
# libxml
# mbstring
# mcrypt
# mysqli
# mysqlnd
# openssl
# pcntl
# pcre
# PDO
# pdo_mysql
# pdo_sqlite
# Phar
# readline
# Reflection
# session
# SimpleXML
# sockets
# sodium
# SPL
# sqlite3
# standard
# tokenizer
# xml
# xmlreader
# xmlwriter
# xsl
# zip
# zlib

プログラム再実行してみたら、問題解決!

# docker-php-ext-install zip

docker-php-ext-install で zip モジュールインストール

RUN apt-get update \
&& apt-get install -y zlib1g-dev libpq-dev unzip libzip-dev imagemagick libmagickwand-dev

RUN docker-php-ext-install pdo_mysql mysqli zip \
&& pecl install imagick \
&& docker-php-ext-enable imagick

PHPExcel 非推奨

PHPExcel (opens new window) は 2015 年にバージョン 1.8.1 最後のリリースで更新停止しました。2019 年サポート終了のため、非推奨となり、PHPExcel の後継であるPhpSpreadsheet (opens new window)を導入することを推奨されます。

2022-04-28

同じタグを持つ記事をピックアップしました。