phpEnv中zip扩展默认未启用,需手动在php.ini中取消extension=zip注释并重启服务,否则new ZipArchive()会报类不存在错误。

phpEnv 里 zip 扩展默认是否启用
phpEnv 集成环境在多数版本中**默认未启用 zip 扩展**,即使 PHP 二进制本身带 zip 模块,php.ini 里仍大概率是注释状态。直接运行 new ZipArchive() 会报 Class 'ZipArchive' not found —— 这不是你代码写错了,是扩展根本没加载。
修改 phpEnv 的 php.ini 启用 zip
phpEnv 的 php.ini 通常位于:phpEnvphpphp.ini(路径以你实际安装目录为准)。用文本编辑器打开后搜索:
;extension=zip
把它改成:
extension=zip
注意:Windows 下不需要写 .dll 后缀,也不用写 php_zip.dll;Linux 类似,不写 .so。phpEnv 自带的 PHP 已编译好依赖,只缺这一行激活。
立即学习“PHP免费学习笔记(深入)”;
改完保存,然后必须执行以下任一操作:
- 重启 phpEnv 控制面板里的「Apache」或「Nginx」服务
- 如果用的是 CLI 模式(比如命令行跑脚本),需关闭并重新打开终端窗口(因 phpEnv 的 CLI PHP 进程可能缓存了旧配置)
验证 zip 扩展是否真正生效
别只信 phpinfo() 页面里有没有 zip 模块标题——要确认 ZipArchive 类能实例化:
<?php
if (class_exists('ZipArchive')) {
echo "✅ ZipArchive 可用";
} else {
echo "❌ ZipArchive 类不存在";
}
?>
常见误判点:
- 你在 phpinfo() 页面看到 zip 模块,但用的是 Apache SAPI,而 CLI 下运行脚本时调用的是另一份
php.ini(路径可能是phpEnvphpphp-cli.ini)→ 要分别检查两处 - phpEnv 多版本共存时,当前面板选中的 PHP 版本和你实际执行
php -v的版本不一致 → 先运行php -i | grep "Loaded Configuration File"确认真实加载的 ini 路径
phpEnv 中用 ZipArchive 压缩/解压的实际注意事项
phpEnv 一般部署在 Windows 上,路径分隔符、权限、临时目录是高频翻车点:
-
addFile()的源文件路径必须是**绝对路径**,且用正斜杠/或双反斜杠\,单反斜杠在字符串里会被转义(如"C: est.txt"实际变成C: est.txt) - 解压目标目录(
extractTo()第二个参数)必须**已存在且可写**;ZipArchive不会自动创建父级目录 - 压缩包路径若含中文或空格,建议用
realpath()规范后再传给open(),避免ZIPARCHIVE::ER_OPEN错误 - phpEnv 默认禁用
exec()等函数,但ZipArchive是纯 PHP 扩展,不依赖外部命令,这点放心
最易被忽略的是:phpEnv 的「软件初始化」功能不会自动处理扩展开关,它只重置服务路径和端口配置。zip 扩展一旦手动改过 php.ini,后续升级 phpEnv 版本时,这个改动会被覆盖——记得备份你的 ini 修改项。



















