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');
}
相关推荐
m0_748708059 分钟前
C++中的观察者模式实战
开发语言·c++·算法
qq_5375626722 分钟前
跨语言调用C++接口
开发语言·c++·算法
wjs202432 分钟前
DOM CDATA
开发语言
Tingjct34 分钟前
【初阶数据结构-二叉树】
c语言·开发语言·数据结构·算法
猷咪1 小时前
C++基础
开发语言·c++
IT·小灰灰1 小时前
30行PHP,利用硅基流动API,网页客服瞬间上线
开发语言·人工智能·aigc·php
快点好好学习吧1 小时前
phpize 依赖 php-config 获取 PHP 信息的庖丁解牛
android·开发语言·php
秦老师Q1 小时前
php入门教程(超详细,一篇就够了!!!)
开发语言·mysql·php·db
烟锁池塘柳01 小时前
解决Google Scholar “We‘re sorry... but your computer or network may be sending automated queries.”的问题
开发语言
是誰萆微了承諾1 小时前
php 对接deepseek
android·开发语言·php