当前位置:首页 > PHP

php实现zip压缩

2026-02-16 22:03:12PHP

使用 ZipArchive 类实现压缩

ZipArchive 是 PHP 内置的扩展类,用于创建和操作 ZIP 压缩文件。确保 PHP 已启用该扩展(php.ini 中 extension=zip)。

$zip = new ZipArchive();
$zipName = 'archive.zip';

if ($zip->open($zipName, ZipArchive::CREATE | ZipArchive::OVERWRITE) === TRUE) {
    // 添加文件到压缩包
    $zip->addFile('path/to/file1.txt', 'file1.txt'); // 第二个参数可指定压缩包内路径
    $zip->addFile('path/to/file2.jpg', 'images/file2.jpg');

    // 添加目录(递归)
    $dir = 'path/to/folder';
    $files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dir));
    foreach ($files as $file) {
        if (!$file->isDir()) {
            $filePath = $file->getRealPath();
            $relativePath = substr($filePath, strlen($dir) + 1);
            $zip->addFile($filePath, 'folder/' . $relativePath);
        }
    }

    // 添加纯文本内容(无需实际文件)
    $zip->addFromString('readme.txt', 'This is a generated ZIP file.');

    $zip->close();
    echo "ZIP created successfully.";
} else {
    echo "Failed to create ZIP.";
}

使用命令行调用 zip 工具

若服务器已安装 zip 命令(Linux/Unix 环境),可通过 exec()shell_exec() 调用系统命令实现压缩:

$filesToZip = 'file1.txt file2.jpg';
$zipName = 'archive.zip';
$command = "zip -r $zipName $filesToZip";

exec($command, $output, $returnCode);

if ($returnCode === 0) {
    echo "ZIP created via command line.";
} else {
    echo "Command failed: " . implode("\n", $output);
}

动态生成 ZIP 并强制下载

以下代码直接输出 ZIP 到浏览器,触发下载:

php实现zip压缩

$zip = new ZipArchive();
$zipName = 'dynamic_archive.zip';

header('Content-Type: application/zip');
header('Content-Disposition: attachment; filename="' . $zipName . '"');

// 使用输出缓冲区捕获 ZIP 内容
$tempFile = tempnam(sys_get_temp_dir(), 'zip');
if ($zip->open($tempFile, ZipArchive::CREATE) === TRUE) {
    $zip->addFile('path/to/file.pdf', 'document.pdf');
    $zip->addFromString('note.txt', 'Downloaded on: ' . date('Y-m-d'));
    $zip->close();

    readfile($tempFile);
    unlink($tempFile); // 清理临时文件
    exit;
} else {
    header('HTTP/1.1 500 Server Error');
    echo "ZIP generation failed.";
}

注意事项

  • 文件路径需确保 PHP 有读取权限,输出目录需有写入权限。
  • 大文件压缩时建议增加 set_time_limit(0) 避免超时。
  • 动态下载时需确保无任何输出(包括空格)在 header() 前。
  • 使用 RecursiveDirectoryIterator 时注意排除 ... 目录。

标签: phpzip
分享给朋友:

相关文章

php实现上传

php实现上传

PHP 文件上传实现 HTML 表单设置 创建一个包含文件上传字段的 HTML 表单,确保表单的 enctype 属性设置为 multipart/form-data,这是文件上传必需的设置。 <…

php实现即时通讯

php实现即时通讯

PHP 实现即时通讯的方案 即时通讯(IM)可以通过多种方式实现,PHP 作为服务器端语言,通常需要结合前端技术(如 WebSocket、AJAX)或第三方服务来实现实时通信。以下是几种常见的实现方式…

php实现注册登陆

php实现注册登陆

PHP 注册功能实现 创建数据库表结构(MySQL示例): CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, usern…

php redis 队列实现

php redis 队列实现

PHP Redis 队列实现 Redis 是一个高性能的键值存储系统,常被用作消息队列。以下是使用 PHP 和 Redis 实现队列的几种方法。 安装依赖 确保已安装 PHP Redis 扩展。可以…

php 实现下载apk

php 实现下载apk

使用 PHP 实现 APK 文件下载 通过 PHP 实现 APK 文件下载的核心是设置正确的 HTTP 头信息,并输出文件内容。以下是一个完整的实现方法。 设置 HTTP 头信息 确保客户端正确识别…

php实现下载功能

php实现下载功能

PHP实现文件下载功能 使用PHP实现文件下载功能可以通过设置HTTP头信息控制浏览器行为,以下是几种常见实现方式: 基础下载方法 $file_path = '/path/to/file.p…