IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> 调用PHP原生实现图片压缩包下载并分包 -> 正文阅读

[PHP知识库]调用PHP原生实现图片压缩包下载并分包

需求描述:

? ?根据记录类型对图片实现分包处理并以压缩包形式实现下载

示例代码:

? ??

 public static function downloadZip($files,$fileName = 'time'){
        if (!is_array($files)){
            return false;
        }

        set_time_limit(1200);
        $zip_name = "示例";
        $zip = new \ZipArchive();

        if ($zip->open($zip_name, \ZipArchive::CREATE) !== TRUE) {
            exit ('无法打开文件,或者文件创建失败');
        }
        $folders = [];
        foreach($files as $key => $file){
            //判断结转单类型进行分包存储 1: VIP签收单  2:整体结课单 3:排版确认单
            $dir = './over-images';
            if(!file_exists($dir)){
                mkdir($dir);
            }
            if($file["type"] == 1){
                $dir = './over-images/Vip';
            }
            if($file["type"] == 2){
                $dir = './over-images/EndClass';
            }
            if($file["type"] == 3){
                $dir = './over-images/TypeConfirm';
            }
            //类型文件夹不存在,创建
            if(!file_exists($dir)){
                mkdir($dir);
            }
            //存储文件到临时文件夹
            $file_remote_url = self::getImg($file['url']);
            $fileContent     = file_get_contents($file_remote_url);
            $file_name = iconv('utf-8', 'GBK', basename($file['url']));
            //处理文件名:加标识(分包后不知图片对应哪条数据)
            $file_name_array = explode('.',$file_name);
            $file_front = $file['num'];
            $file_name  = $file_front.'.'.$file_name_array[1];
            file_put_contents($dir.'/'.$file_name,$fileContent);
            $folders[] = [
                'name'=>$file_name,
                'src' =>$dir.'/'.$file_name,
                'id'  =>$key+1,
                'type'=>$file['type'],//分组依据不能丢
            ];
        }
        // 图片的路径,可以是多个文件
        $object = $zip->open($zip_name, \ZipArchive::CREATE);//创建zip压缩对象
        if($object){
            foreach ($folders as $folder) {
                $zip_dir = "VIP签收单/";
                if($folder['type'] == 1){
                    $zip_dir = "VIP签收单/";
                }
                if($folder['type'] == 2){
                    $zip_dir = "整体结课单/";
                }
                if($folder['type'] == 3){
                    $zip_dir = "排版确认单/";
                }
                $zip->addFile($folder["src"],$zip_dir.$folder['name']);//文件存入对应文件夹

            }
        }

        $zip->close();
        //清空(擦除)缓冲区并关闭输出缓冲
        ob_end_clean();
        header('Content-Type: application/zip;charset=utf8');
        //下载建好的.zip压缩包
        header("Access-Control-Allow-Origin: *"); // 允许任意域名发起的跨域请求
        header('Access-Control-Allow-Headers: X-Requested-With,X_Requested_With');
        header("Content-Type: application/force-download");//告诉浏览器强制下载
        header("Content-Transfer-Encoding: binary");//声明一个下载的文件
        header('Content-Type: application/zip');//设置文件内容类型为zip
        header('Content-Disposition: attachment; filename='.$fileName.'.zip');//声明文件名
        header('Content-Length: ' . filesize($zip_name));//声明文件大小
        readfile($zip_name);
        unlink($zip_name);
        //干掉临时文件,防止空间占用
        $parent_dir = ["./over-images/Vip/","./over-images/EndClass/","./over-images/TypeConfirm/"];
        foreach($parent_dir as $dir){
            if(file_exists($dir)) {
                if ($dh = opendir($dir)) {
                    while (($file = readdir($dh)) !== false) {
                        if ($file!='.' && $file!='..') {
                            unlink($dir.'/'.$file);
                        }
                    }
                }
                closedir($dh);
            }
        }
        die;
    }

功能效果:

?

?

?

?

  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2021-12-18 15:46:33  更:2021-12-18 15:46:37 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/14 14:27:23-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码