PHP操作ZipArchive实现文件上传下载功能

admin 轻心小站 关注 LV.19 运营
发表于php技术学习版块 教程

在PHP中,ZipArchive 类提供了创建和修改ZIP文件的功能。通过这个类,你可以轻松地实现文件的压缩(上传)和解压缩(下载)功能。以下是使用 ZipArchive 实现文件上传和下载的基本步骤

在PHP中,ZipArchive 类提供了创建和修改ZIP文件的功能。通过这个类,你可以轻松地实现文件的压缩(上传)和解压缩(下载)功能。以下是使用 ZipArchive 实现文件上传和下载的基本步骤:

文件上传(压缩)

  1. 接收上传的文件:

    • 通过HTML表单接收文件上传,确保表单的 enctype 属性设置为 multipart/form-data。

    • 在PHP端,通过 $_FILES 超全局变量获取上传文件的信息。

  2. 创建ZIP文件:

    • 使用 ZipArchive 创建一个新的ZIP文件。

    • 调用 open 方法,并设置模式为 ZIPARCHIVE::CREATE。

  3. 添加文件到ZIP:

    • 遍历上传的文件数组,使用 addFile 方法将文件添加到ZIP中。

    • 可以指定压缩方式,例如 ZIPARCHIVE::CM_DEFLATE。

  4. 关闭ZIP文件:

    • 完成文件添加后,调用 close 方法关闭ZIP文件。

  5. 保存或输出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';
    }
}

文件下载(解压缩)

  1. 读取ZIP文件:

    • 使用 ZipArchive 打开一个已存在的ZIP文件。

    • 调用 open 方法,并设置模式为 ZIPARCHIVE::OPEN。

  2. 提取ZIP文件内容:

    • 遍历ZIP中的文件列表,使用 extractTo 方法将文件解压缩到指定目录。

  3. 关闭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脚本有足够的权限读取和写入文件。此外,对于上传的文件,还需要进行安全检查,防止潜在的安全风险。

文章说明:

本文原创发布于探乎站长论坛,未经许可,禁止转载。

题图来自Unsplash,基于CC0协议

该文观点仅代表作者本人,探乎站长论坛平台仅提供信息存储空间服务。

评论列表 评论
发布评论

评论: PHP操作ZipArchive实现文件上传下载功能

粉丝

0

关注

0

收藏

0

已有0次打赏