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');
}
相关推荐
BingoGo2 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php
JaguarJack2 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php·服务端
BingoGo3 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php
JaguarJack3 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php·服务端
JaguarJack4 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
后端·php·服务端
BingoGo4 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
php
JaguarJack5 天前
告别 Laravel 缓慢的 Blade!Livewire Blaze 来了,为你的 Laravel 性能提速
后端·php·laravel
郑州光合科技余经理6 天前
代码展示:PHP搭建海外版外卖系统源码解析
java·开发语言·前端·后端·系统架构·uni-app·php
feifeigo1236 天前
matlab画图工具
开发语言·matlab
dustcell.6 天前
haproxy七层代理
java·开发语言·前端