PHP 实现文件打包成zip格式并下载

PHP 文件打包并下载

有个这样的需求,将多个文件打包成zip格式并下载到本地
可根据 ZipArchive这个类来实现此功能
我自己也研究了一下,然后把搞出来了 ,经测试绝对好用
话不多说直接上代码
    $params = $_REQUEST;  //获取前端form表单传过来的选中文件的id
    
    if(empty($params['files'])){
    
        echo "";exit;
    }
        $id = $params['files'];//文件id

    foreach($id as $k => $v){
        $arr[] = DB::table('GoodsFile')->where('id',$v)->field('files,files_name')->select();

        foreach($arr as $key=>$val){
            $arr1[$key] = $val[0];
        }
    }
    foreach($arr1 as $k=>$v){

        $file_name[] = ($v['files_name']);// 文件名称

        $filepath=iconv("utf-8","gb2312",$v['files']);

        $file_path[]=$_SERVER['DOCUMENT_ROOT'].'/'.$filepath;     //使用绝对路径
    }

    $time = time();
    $filetime = date('YmdHis', $time);

    $file_url = $_SERVER['DOCUMENT_ROOT']."/static/upload/zip/"."下载文件".$filetime.".zip"; // 压缩包所在的位置路径

    $zip = new ZipArchive();

    $zip->open($file_url, ZipArchive::CREATE);   //打开压缩包

    foreach ($file_path as $file) {
        $zip->addFile($file, basename($file));   //向压缩包中添加文件
    }

    $rs = $zip->close();  //关闭压缩包

    //打开文件---先判断再操作
    
    if(!file_exists($file_url)){
    
        echo "文件不存在";
        
        return ; //直接退出
    }

    //这里是输出下载;
    header("Cache-Control:max-age=0");

    header("Content-Description:FileTransfer");

    header('Content-disposition:attachment;filename='.basename($file_url));//文件名

    header("Content-Type:application/zip");//zip格式的

    header("Content-Transfer-Encoding:binary");//告诉浏览器,这是二进制文件

    header('Content-Length:'.filesize($file_url));//告诉浏览器,文件大小

    @readfile($file_url);//输出文件;

你可能感兴趣的:(tp框架,php,thinkphp,zip)