Karp 的技术博客

在 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 文件,以避免权限问题。

php

版权属于:karp
作品采用:本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。
更新于: 2024年10月21日 03:45
0

目录

来自 《PHP 多文件打包下载》