PHP 多文件打包下载方法

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

/**
 * 多文件下载 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);
    
}

你可能感兴趣的:(PHP,ThinkPHP框架,文件下载,php,开发语言)