php批量下载图片并打包

封装函数

<?php
namespace app\admin\model;
use think\Db;
use think\Model;
class Activity extends Model
{
   public static function downImg($arr)
    {
        //在此之前你的项目目录中必须新建一个空的zip包
        $file_template='./download/downimg.zip';
        //自定义文件名
        $download=date('Ymd',time());
        //即将打包的zip文件名称
        $downname = $download.'.zip';
        //把你打包后zip所存放的目录
        $file_name = "./download/".$download."zip";
        //把原来项目目录存在的zip复制一份新的到另外一个目录并重命名(可以在原来的目录)
        $result = copy( $file_template, $file_name );
        $zip=new \ZipArchive();
        $imgArr= $arr;
        //dump($arr);
        //打开你复制过后空的zip,包在zip压缩包中建一个空文件夹,成功时返回 TRUE
        if($zip->open($file_name,\ZipArchive::CREATE)===TRUE){
            $zip->addEmptyDir($download);
            //根据自己的场景需要去处理业务
            $i=1;
            foreach($imgArr as $key=>$val){
                //得到图片后缀名
                $file_ext=trim(strrchr($val['image_src'], '.'),'.');
                //图片重命名
                $zip->addFromString($download.'/'.$val['title'].'.'.$file_ext,file_get_contents($val['image_src']));
                $i++;
            }
            $zip->close();
            $fp=fopen($file_name,"r");
            //获取文件的字节
            $file_size=filesize($file_name);
            //下载需要的header头
            Header("Content-type: application/octet-stream");
            Header("Accept-Ranges: bytes");
            Header("Accept-Length:".$file_size);
            Header("Content-Disposition: attachment; filename=$downname");
            //设置一次读取的字节数,每读取一次,就输出数据(即返回给浏览器)
            $buffer=1024;
            //读取的总字节数
            $file_count=0;
            //向浏览器返回数据,如果下载完成就停止输出
            while(!feof($fp) && $file_count<$file_size){
                $file_con=fread($fp,$buffer);
                $file_count+=$buffer;
                echo $file_con;
            }
            fclose($fp);
            //下载完成后删除压缩包,临时文件夹
            if($file_count>=$file_size){
                unlink($file_name);
            }
            return true;
        }
    }
   

调用

      $param=$this->request->param();
        $row=Db::name('activity_code')->where('activity_id',$param['id'])->select();
        foreach ($row as $k=>$v){
            $arr[$k]['image_src'] = '.'.$v['qr_img'];//图片路径
            $arr[$k]['title'] =‘文件名’
        }
        ActivityModel::downImg($arr);
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是誰萆微了承諾

你的鼓励是对我最大的支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值