今までLinuxサーバ(PHP7.2)で動かしていたものを、WindowsServer2022(PHP8.2)へ移行したところ、以下のようなエラーが発生しました。
PHP Fatal error: Uncaught Error: Class "ZipArchive" not found in C:\***\htdocs\vendor\phpoffice\phpspreadsheet\src\PhpSpreadsheet\Writer\Xlsx.php:210
PHPでExcelファイルを取り扱うためにPhpSpreadSheetを使っているのですが、この処理途中でZipArchiveが無いよ!と言われているのです。
エクセル形式ファイル(拡張子.xlsx)って、中身はZIPアーカイブなんですよね。拡張子を.zipに変更すれば、ZIP形式書庫として展開できます。
で、そのZIPアーカイブを扱うためのクラスが無い、という状態。
解決方法
このエラーを解決する方法は簡単。PHP側で、ZIPアーカイブを扱うための拡張機能を有効にしてあげるだけ。
php.iniにある以下の行のコメントアウトを外してApacheを再起動すれば解決します。
extension=zip
さいごに
ZipArchiveについて、Windowsでは、PHP8.2.0より前のバージョンには標準で拡張モジュールが組み込まれていたようなのですが、8.2.0からは明示的に有効にする必要があるそうです。

PHP: インストール手順 - Manual
PHP is a popular general-purpose scripting language that powers everything from your blog to the most popular websites i...
php.iniに一行追加する(コメントアウトを外す)だけでいいので、簡単に解決できました。
今日の作業は以上です。お疲れ様でした!
初稿:2025年3月1日
コメント