Laravel集成phpword读取docx时提示Class ZipArchive not found
解决PHPWord报错「Class 'ZipArchive' not found」的方案
Hey,我来帮你搞定这个问题!虽然你已经在PHP里装了zip扩展,但系统还是找不到ZipArchive类,大概率是扩展没正确加载到运行Laravel的PHP进程里,试试下面这些排查步骤:
确认Web服务器和CLI用的是同一个PHP版本
很多时候我们在终端看的PHP环境和Web服务器(比如Apache、Nginx+PHP-FPM)用的不是同一个版本。你可以这么验证:- 写个简单的
phpinfo()文件放到Laravel的public目录,浏览器访问它,看看zip扩展有没有显示,以及当前PHP的安装路径。 - 打开终端执行
php -m,看看zip在不在扩展列表里,再对比下PHP版本和路径。
如果两者不一样,那你得给Web服务器用的那个PHP版本装上并启用zip扩展才行。
- 写个简单的
重启Web服务器和PHP-FPM(如果用的话)
装完扩展后必须重启服务才能生效!比如:- Apache用户:执行
sudo service apache2 restart - Nginx+PHP-FPM用户:执行
sudo service php8.1-fpm restart(把8.1换成你实际的PHP版本号)
- Apache用户:执行
检查Web服务器对应的php.ini配置
有时候扩展装了,但php.ini里没启用:- 通过刚才的
phpinfo()找到Web服务器用的php.ini路径。 - 打开这个文件,找
extension=zip这一行,确保前面没有分号;(分号代表注释)。 - 如果找不到这行,手动加上
extension=zip,保存后重启服务。
- 通过刚才的
写个小脚本验证ZipArchive是否可用
搞个测试脚本放public目录,访问它确认:<?php if (class_exists('ZipArchive')) { echo "ZipArchive类已经加载成功啦!"; } else { echo "还是找不到ZipArchive类..."; } phpinfo(); ?>如果显示找不到,那肯定是Web服务器的PHP环境没加载zip扩展,回到前面的步骤再排查。
更新PHPWord相关依赖包
这个报错来自phpoffice/common包,说不定旧版本有兼容性问题。执行composer update phpoffice/phpword phpoffice/common把依赖更到最新版试试。
要是你用的是宝塔、XAMPP这类集成环境,记得去环境的扩展管理里确认zip扩展已经启用,保存配置后重启服务就行。
内容的提问来源于stack exchange,提问作者Md. Sahadat Hossain
相关产品推荐
相关产品推荐

