PHP 多文件打包下载方法

16 篇文章 0 订阅
15 篇文章 0 订阅

代码是按照我需要的内容编写的,里面有注释,可以按照注释修改为自己需要的内容。

/**
 * 多文件下载 Thinkphp5.0+
 */
public function download(){

    //接收传递进来的参数
    $post = request()->param();
    //接收ID,并进行去除两边的 ,
    $ids = explode(',', trim($post['id'],","));
    //定义空数组
    $fileList = array();
    //循环ID
    foreach ($ids as $k => $v) {
        
        //查询信息
        $fileArr = M('user')->field('real_name,resume_file,resume_name')->find($v);

        if(!empty($fileArr['resume_file'])){
            //将文件补全路径
            $fileArr['resume_file'] = dirname(dirname(dirname(__DIR__))).$fileArr['resume_file'];
            //存储信息
            $fileList[] = $fileArr;
        }
        
    }

    //定义临时zip文件
    $filename = 'tmp.zip';
    //new PHP类库的zip压缩类
    $zip = new \ZipArchive();
    //打开文件
    $zip->open($filename, \ZipArchive::CREATE | \ZipArchive::OVERWRITE | \ZipArchive::CM_STORE);
    //循环信息数组
    foreach ($fileList as $key=>$vo) {
        //分割文件路径,获取后缀名
        $fileArrHz = explode('.',$vo['resume_file']);
        //获取数组最后一个参数,后缀名
        $type = $fileArrHz[count($fileArrHz) - 1];
        //获取文件内容
        $fileData = file_get_contents($vo['resume_file']);
        //判断信息是否存在
        if ($fileData) {
            //将文件重新定义名称,用户名 + 后缀名
            $zip->addFromString($vo['real_name'].'.'.$type, $fileData);
        }
    }

    //关闭zip类
    $zip->close();
    //打开临时压缩包
    $file = fopen($filename, "r");
    //定义header头信息
    Header("Content-type: application/octet-stream");
    Header("Accept-Ranges: bytes");
    Header("Accept-Length: " . filesize($filename));
    Header("Content-Disposition: attachment; filename=文件.zip");
    //一次只传输1024个字节的数据给客户端
    $buffer = 1024; //

    while (!feof($file)) {
        //将文件读入内存
        $file_data = fread($file, $buffer);
        //每次向客户端回送1024个字节的数据
        echo $file_data;
    }
    //关闭文件
    fclose($file);
    
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值