XAMPP是一款流行的PHP集成开发环境,默认安装后有些扩展并没有开启,zip扩展就是其中之一。当你在本地运行涉及压缩包处理的程序时,比如WordPress主题上传、备份导出功能,经常会出现Class ZipArchive not found这样的报错,这说明当前PHP环境没有加载zip扩展。本文将介绍如何在XAMPP中开启zip扩展,并演示用PHP处理在线压缩包的常用方法。

一、为什么XAMPP默认可能没有开启zip扩展
XAMPP为了控制安装体积和启动速度,默认只启用一部分常用扩展。zip扩展属于按需加载的模块,在php.ini中对应的配置行通常以分号开头,处于被注释的状态。PHP官方从5.2版本开始将zip以扩展形式提供,到了PHP 7.4之后,zip扩展不再默认编译进PHP,需要单独启用。因此很多新版的XAMPP安装完成后,直接调用ZipArchive类就会报错。
判断扩展是否开启最简单的办法是查看phpinfo。在网站根目录新建一个文件,写入<?php phpinfo();,浏览器访问后搜索zip关键字,如果找不到相关模块信息,就说明扩展没有加载。也可以用extension_loaded('zip')函数检测,返回false则表示未开启。
二、在php.ini中开启zip扩展的具体步骤
首先打开XAMPP控制面板,点击Apache对应的Config按钮,选择PHP (php.ini),即可直接打开当前生效的配置文件。也可以手动定位到XAMPP安装目录,例如C:\xampp\php\php.ini,用记事本或编辑器打开。
在文件中搜索extension=zip,如果这一行前面有分号,把分号删掉即可。部分老版本写法是extension=php_zip.dll,同样去掉前面的分号。需要注意Windows下zip扩展依赖libzip库,新版XAMPP已经在ext目录中内置了php_zip.dll,一般情况下无需额外下载。修改完成后保存文件,然后在XAMPP控制面板重启Apache服务,务必确认是Stop再Start,而不是只点Refresh。
; 修改前的配置(分号表示注释,未生效) ;extension=zip ; 修改后的配置(去掉分号,开启扩展) extension=zip
如果php.ini中没有extension=zip这一行,可以手动添加一行,并确认extension_dir指向正确的扩展目录。配置不生效时常见原因有两个:一是修改了错误的php.ini文件,可以通过phpinfo页面顶部的Loaded Configuration File字段确认实际加载的路径;二是Apache没有真正重启。此外,PHP 7.3及以下版本还需要检查libzip.dll是否存在于C:\xampp\php目录下。
三、用ZipArchive处理在线压缩包的代码示例
扩展开启后,就可以使用ZipArchive类完成压缩、解压等操作。下面的例子演示了如何把指定目录打包成zip文件并下载,这在实现网站备份或导出功能时非常实用。代码中先创建压缩包,再通过循环遍历目录把文件逐个加入,最后设置响应头触发浏览器下载。
<?php
// 创建压缩包
$zip = new ZipArchive();
$zipName = 'backup_' . date('YmdHis') . '.zip';
if ($zip->open($zipName, ZipArchive::CREATE) === true) {
$dir = 'C:\\xampp\\htdocs\\myproject\\uploads';
$files = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($dir),
RecursiveIteratorIterator::LEAVES_ONLY
);
foreach ($files as $file) {
if (!$file->isDir()) {
$filePath = $file->getRealPath();
$relativePath = substr($filePath, strlen($dir) + 1);
$zip->addFile($filePath, $relativePath);
}
}
$zip->close();
// 触发浏览器下载
header('Content-Type: application/zip');
header('Content-Disposition: attachment; filename="' . $zipName . '"');
header('Content-Length: ' . filesize($zipName));
readfile($zipName);
unlink($zipName); // 下载后删除临时文件
exit;
} else {
exit('压缩包创建失败');
}
解压操作同样简单,调用open方法配合extractTo即可。需要注意的是,extractTo的第二个参数可以指定只解压部分文件,解压前建议检查文件路径,防止压缩包内包含类似../这样的路径造成目录穿越安全问题。读取压缩包内的文件列表可以使用getNumFiles和statIndex方法组合遍历。
<?php
$zip = new ZipArchive();
if ($zip->open('backup.zip') === true) {
// 解压到指定目录,覆盖同名文件
$zip->extractTo('C:\\xampp\\htdocs\\myproject\\restore');
$zip->close();
echo '解压完成';
}
// 遍历压缩包内文件列表
$zip->open('backup.zip');
for ($i = 0; $i < $zip->numFiles; $i++) {
$stat = $zip->statIndex($i);
echo $stat['name'] . '<br>';
}
$zip->close();
四、常见报错排查与注意事项
第一种报错是Class 'ZipArchive' not found,绝大多数情况是扩展没开启或者Apache没有重启,按照上文步骤检查即可。第二种是修改php.ini后依然无效,这时要重点确认加载的配置文件路径,XAMPP有时会因为权限问题把配置写到别处,phpinfo中的Loaded Configuration File是唯一准确的依据。
第三种情况是Linux环境下使用XAMPP(即XAMPP for Linux)时,扩展文件名是zip.so而不是php_zip.dll,php.ini中对应写法是extension=zip,扩展目录通常在/opt/lampp/lib/php/extensions/下面。如果ext目录中缺少对应的扩展文件,只能升级XAMPP版本或手动编译安装。最后提醒一点,处理用户上传的压缩包时务必限制文件大小和类型,并使用ZipArchive::CHECKCONS参数校验压缩包完整性,避免恶意文件导致服务器资源被耗尽。
XAMPP zip扩展PHP压缩包处理ziparchive修改时间:2026-09-07 21:34:41