PHP之ZipArchive打包压缩文件

1、Linux 安装 nginx 安装zlib库

2、使用,目前我这边的需求是。

1、材料图片、单据图片,分别压缩打包到"材料.zip"和"单据.zip"。

2、"材料.zip"和"单据.zip"在压缩打包到"订单.zip"

3、支持批量导出多个订单的图片信息所有订单的压缩文件,打包压缩到"all.zip"

php 复制代码
//定义总的压缩包文件名称
$all_name = 'all.zip';
// 创建ZipArchive对象
$zip_all = new ZipArchive();
if ($zip_all->open($all_name, ZipArchive::CREATE) === TRUE) {
    //循环查询多个订单信息
    $sql = "select * from shop_order_piesong where id in (76,80)";
    $arr = _get_all($sql);
    foreach ($arr as $i => $rs) {
        //获取压缩材料图片数组
        $admin4_pic1 = $rs["admin4_pic1"] ? explode(',', rtrim($rs["admin4_pic1"], ',')) : array();
        //创建材料压缩包文件
        $zip_cailiao = new ZipArchive();
        if ($zip_cailiao->open('cailiao.zip', ZipArchive::CREATE) === TRUE) {
            // 添加文件到Zip文件中
            foreach ($admin4_pic1 as $ip => $rsp) {
                $zip_cailiao->addFile(dirname(dirname(__FILE__)) . $rsp, 'photo' . $ip . '.jpg');
            }
            // 关闭Zip文件
            $zip_cailiao->close();
        }

        //创建单据压缩包文件
        $admin4_pic = $rs["admin4_pic"] ? explode(',', rtrim($rs["admin4_pic"], ',')) : array();
        // 创建ZipArchive对象
        $zip_danju = new ZipArchive();
        if ($zip_danju->open('danju.zip', ZipArchive::CREATE) === TRUE) {
            // 添加文件到Zip文件中
            foreach ($admin4_pic as $ip => $rsp) {
                $zip_danju->addFile(dirname(dirname(__FILE__)) . $rsp, 'photo' . $ip . '.jpg');
            }
            // 关闭Zip文件
            $zip_danju->close();
        }

        //整合两个图片压缩包生成新的压缩包
        $zip_or = new ZipArchive();

        if ($zip_or->open($rs["danhao"] . '.zip', ZipArchive::CREATE) === TRUE) {
            $zip_or->addFile(dirname(dirname(__FILE__)) . '/adminIsAdmin/cailiao.zip', '材料.zip');
            $zip_or->addFile(dirname(dirname(__FILE__)) . '/adminIsAdmin/danju.zip', '单据.zip');
            // 关闭Zip文件
            $zip_or->close();
      
        }

        //循环整个订单放入总的压缩包文件
        $zip_all->addFile(dirname(dirname(__FILE__)) . '/adminIsAdmin/' . $rs["danhao"] . '.zip', $rs["danhao"] . '.zip');

    }
    // 关闭Zip文件
    $zip_all->close();
}

//下载Zip文件到本地
header('Content-Type: application/zip');
header('Content-disposition: attachment; filename=' . $all_name . '');
header('Content-Length: ' . filesize($all_name));
readfile($all_name);

//使用完成后在服务器中删除压缩包文件
unlink("cailiao.zip");
unlink("danju.zip");
unlink($all_name);

$sql = "select * from shop_order_piesong where id in (76,80)";
$arr = _get_all($sql);
foreach ($arr as $i => $rs) {
    unlink($rs["danhao"] . '.zip');
}
相关推荐
IT笔记22 分钟前
【Rust】Rust Match 模式匹配详解
java·开发语言·rust
逝水无殇44 分钟前
C# 运算符重载详解
开发语言·后端·c#
TPBoreas1 小时前
配置信息防泄露方案:.env 环境隔离详解(dotenv-java)
java·开发语言
敲代码的嘎仔2 小时前
实习日志day6--实习日志day6--title命名规范化&businessType纠正&补充缺失的@Log注解&报警与通信模块补充&产出阶段总结文档
java·开发语言·人工智能·git·python·实习·大二
江华森2 小时前
Python 实现高德地图找房(一):环境搭建与数据爬虫
开发语言·爬虫·python
杜子不疼.2 小时前
【Qt初识】信号槽(三):机制意义、断开连接与 Lambda 表达式
开发语言·数据库·qt
老迟到的茉莉3 小时前
Hermes 是谁?跟 Claude Code 差在哪
开发语言·python
学逆向的3 小时前
汇编——内存
开发语言·汇编·算法·网络安全
lbb 小魔仙4 小时前
MuMu 模拟器 6.0 硬核测评:这次升级确实不一样
java·开发语言·模拟器·mumu·硬核测评
r_oo_ki_e_4 小时前
Java 线程池
java·开发语言