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

2 篇文章 0 订阅

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

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

*/
function download_txt(array $data){
    //每100000生成一个文件
    $count=100000;
    $list=array_chunk($data,$count);
    $file=[];
    //生成多个文件  并且写入文件中
    for ($i=0;$i<count($list);$i++){
        $content='';
        $file[$i]=ROOT_PATH.'/public/export/'."_".date("Y-m-d")."_".$i.".txt";
        //创建文件
        $myfile=fopen( $file[$i],'w+');
        foreach($list[$i] as $k=>$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);
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

ttxx12345

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值