关于php打包压缩文件下载代码

 关于php生成多个文件并且打包成压缩文件进行下载

/**
生成多个txt文件  打包下载压缩文件
$data数据

*/
function download_txt(array $data){
    //每100000生成一个文件
    $count=100000;
    $list=array_chunk($data,$count);
    $file=[];
    //生成多个文件  并且写入文件中
    for ($i=0;$i$v){
            $v['Title']=str_replace([PHP_EOL," ","\n","\r","\t"],"",$v['Title']);
            fwrite($myfile,implode("\t",$v).PHP_EOL);
            unset($list[$i][$k]);
        }
        fclose($myfile);

    }
    //大于5.3php版本  好像是自带的类
    $zip=new \ZipArchive();
    //压缩文件地址
    $filename = ROOT_PATH . "/public/export/" .date("Ymd").'.zip';
    //halt($zip->open($filename, \ZIPARCHIVE::CREATE)===TRUE);
    if($zip->open($filename, \ZIPARCHIVE::CREATE)===TRUE) {
        foreach ($file as $v){
            //addFile如果第一个参数含有路径,那么就需要第二个参数用于去掉压缩路径,如果是文件名不需要
            $zip->addFile($v,basename($v));
        }
        $zip->close(); //关闭处理的zip文件
    }
    //用于标记那些需要删除的文件
    array_unshift($file,$filename);
    if(!file_exists($filename)){
        exit("无法找到文件"); //可能创建失败
    }
    header("Cache-Control: public");
    header("Content-Description: File Transfer");
    header('Content-disposition: attachment; filename='.basename($filename)); //文件名
    header("Content-Type: application/zip"); //zip格式的
    header("Content-Transfer-Encoding: binary"); //告诉浏览器,这是二进制文件
    header('Content-Length: '. filesize($filename)); //告诉浏览器,文件大小
    //下面两句代码比较重要   如果没有   下载的压缩文件会提示损坏
    ob_clean();
    flush();
    @readfile($filename);
    //循环删除
    foreach ($file as $k){
        unlink($k);
    }
}

 

你可能感兴趣的:(tp5,php)