在 PHP 中,您可以使用压缩库(如 ZipArchive)将多个文件打包成一个 zip 文件并提供给用户下载。以下是实现这一功能的步骤。
1. 创建 ZIP 文件
您需要使用 ZipArchive
类来创建 ZIP 文件。
1.1 示例代码
<?php
// 检查是否有文件需要打包
if (isset($_POST['files']) && is_array($_POST['files'])) {
// 创建 ZIP 文件
$zip = new ZipArchive();
$zipFileName = 'download.zip';
// 创建 ZIP 文件并打开
if ($zip->open($zipFileName, ZipArchive::CREATE | ZipArchive::OVERWRITE) === TRUE) {
foreach ($_POST['files'] as $file) {
// 确保文件存在
if (file_exists($file)) {
// 添加文件到 ZIP
$zip->addFile($file, basename($file));
} else {
echo "文件不存在: $file<br>";
}
}
// 关闭 ZIP 文件
$zip->close();
// 设置下载头
header('Content-Type: application/zip');
header('Content-disposition: attachment; filename=' . $zipFileName);
header('Content-Length: ' . filesize($zipFileName));
// 读取文件并发送到用户
readfile($zipFileName);
// 删除临时 zip 文件
unlink($zipFileName);
} else {
echo '无法创建 ZIP 文件';
}
} else {
echo '没有文件被选中';
}
?>
1.2 HTML 表单示例
您需要一个表单来选择要下载的文件:
<form action="download.php" method="post">
<input type="checkbox" name="files[]" value="path/to/file1.txt"> File 1<br>
<input type="checkbox" name="files[]" value="path/to/file2.txt"> File 2<br>
<input type="checkbox" name="files[]" value="path/to/file3.txt"> File 3<br>
<input type="submit" value="下载选中的文件">
</form>
2. 代码解释
- ZipArchive:用于创建和管理 ZIP 文件。
- open():打开 ZIP 文件,指定创建或覆盖模式。
- addFile():将文件添加到 ZIP 存档中。
- header():设置 HTTP 响应头,以便浏览器正确处理下载。
- readfile():读取 ZIP 文件并发送到用户。
- unlink():删除临时的 ZIP 文件。
3. 注意事项
- 确保 PHP 有权访问要打包的文件。
- 在生产环境中,注意处理错误和异常。
- 考虑使用临时目录存储 ZIP 文件,以避免权限问题。