当前位置:首页 > PHP

php实现zip压缩

2026-02-16 22:03:12PHP

使用 ZipArchive 类实现压缩

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

php实现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() 调用系统命令实现压缩:

php实现zip压缩

$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 到浏览器,触发下载:

$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实现websocket

php实现websocket

PHP 实现 WebSocket WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议。PHP 可以通过多种方式实现 WebSocket 功能,以下是几种常见的方法: 使用 Ratc…

php 路由实现

php 路由实现

PHP 路由实现方法 在 PHP 中实现路由功能有多种方式,以下是几种常见的实现方法: 使用原生 PHP 实现 通过解析 URL 并匹配对应的控制器和动作: $request = $_SERVER…

php 购物车实现

php 购物车实现

数据库设计 购物车功能通常需要设计数据库表存储商品和用户信息。常见的表包括products(商品表)、users(用户表)和cart(购物车表)。cart表通常包含字段:id(主键)、user_id(…

php无限分类的实现

php无限分类的实现

PHP无限分类的实现 无限分类是一种常见的树形结构数据组织方式,适用于商品分类、菜单管理、地区选择等场景。以下是几种实现方法: 递归实现法 递归是最直观的实现方式,通过函数自身调用来遍历子分类。数据…

php 函数实现

php 函数实现

PHP 函数实现基础 PHP 函数的定义使用 function 关键字,后跟函数名和参数列表。函数名不区分大小写,但建议保持一致。 function functionName($param1, $p…

php实现注册登录

php实现注册登录

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