Products
GG网络技术分享 2025-03-18 16:17 0
在PHP中,ZipArchive 类提供了创建和修改ZIP文件的功能。通过这个类,你可以轻松地实现文件的压缩(上传)和解压缩(下载)功能。以下是使用 ZipArchive 实现文件上传和下载的基本步骤:
接收上传的文件:
通过HTML表单接收文件上传,确保表单的 enctype 属性设置为 multipart/form-data。
在PHP端,通过 $_FILES 超全局变量获取上传文件的信息。
创建ZIP文件:
使用 ZipArchive 创建一个新的ZIP文件。
调用 open 方法,并设置模式为 ZIPARCHIVE::CREATE。
添加文件到ZIP:
遍历上传的文件数组,使用 addFile 方法将文件添加到ZIP中。
可以指定压缩方式,例如 ZIPARCHIVE::CM_DEFLATE。
关闭ZIP文件:
完成文件添加后,调用 close 方法关闭ZIP文件。
保存或输出ZIP文件:
可以选择将ZIP文件保存到服务器,或者直接输出到浏览器供用户下载。
// 检查是否有文件上传
if (isset($_FILES[\'file\']) && $_FILES[\'file\'][\'error\'] == 0) {
// 创建新的ZIP文件
$zip = new ZipArchive();
$zipFileName = \'archive.zip\';
if ($zip->open($zipFileName, ZipArchive::CREATE) === true) {
// 添加文件到ZIP
for ($i = 0; $i < count($_FILES[\'file\'][\'name\']); $i++) {
$fileToCompress = $_FILES[\'file\'][\'tmp_name\'][$i];
$zip->addFile($fileToCompress, $_FILES[\'file\'][\'name\'][$i]);
}
// 关闭ZIP文件
$zip->close();
// 输出ZIP文件供下载
header(\'Content-Description: File Transfer\');
header(\'Content-Type: application/zip\');
header(\'Content-Disposition: attachment; filename=\"\'.basename($zipFileName).\'\"\');
header(\'Expires: 0\');
header(\'Cache-Control: must-revalidate\');
header(\'Pragma: public\');
header(\'Content-Length: \' . filesize($zipFileName));
readfile($zipFileName);
unlink($zipFileName); // 删除临时ZIP文件
exit;
} else {
echo \'Unable to create zip file\';
}
}
读取ZIP文件:
使用 ZipArchive 打开一个已存在的ZIP文件。
调用 open 方法,并设置模式为 ZIPARCHIVE::OPEN。
提取ZIP文件内容:
遍历ZIP中的文件列表,使用 extractTo 方法将文件解压缩到指定目录。
关闭ZIP文件:
完成解压缩后,调用 close 方法关闭ZIP文件。
// 检查是否有ZIP文件指定
if (isset($_GET[\'zipFile\'])) {
$zipFileName = $_GET[\'zipFile\'];
// 指定解压缩目录
$destination = \'./extracted/\';
// 打开ZIP文件
$zip = new ZipArchive();
if ($zip->open($zipFileName) === true) {
// 解压缩ZIP文件到指定目录
$zip->extractTo($destination);
$zip->close();
echo \"ZIP file extracted successfully.\";
} else {
echo \'Unable to open zip file\';
}
}在使用 ZipArchive 进行文件操作时,要注意文件权限和路径问题,确保PHP脚本有足够的权限读取和写入文件。此外,对于上传的文件,还需要进行安全检查,防止潜在的安全风险。
Demand feedback