php zip打包下载文件

 
 
  1. 将文件打包成zip格式
  2. 下载文件的功能

要点解析:

  1. 这里我采用的是php自带的ZipArchive

    a) 我们只需要new一个ZipArchive对象,然后使用open方法创建一个zip文件,接着使用addFile方法,将要打包的文件写入刚刚创建的zip文件中,最好还得记得关闭该对象。

    b) 注意点:使用open方法的时候,第二个参数$flags是可选的,$flags用来指定对打开的zip文件的处理方式,共有四种情况

                    i.     ZIPARCHIVE::OVERWRITE 总是创建一个新的文件,如果指定的zip文件存在,则会覆盖掉

                      ii.    ZIPARCHIVE::CREATE     如果指定的zip文件不存在,则新建一个

              iii.  ZIPARCHIVE::EXCL      如果指定的zip文件存在,则会报错   

               iv.  ZIPARCHIVE::CHECKCON

 
$nid = intval($this->_request->getParam('nid'));
$filelist = $this->model->getOverenter($nid);
foreach ($filelist as $f) {
    $row['file'] = ROOT.'/public/upload/logo/'.$f['ne_file'];
    $row['name'] = $f['es_name'];
    $ext = explode('.',$f['ne_file']);
    $row['ext'] = $ext[1];
    $fileNameArr[]=$row;
}
$name = date('YmdHis').'.zip';
$filename = ROOT."/public/upload/".$name; // 最终生成的文件名(含路径)
$zip = new ZipArchive ();
if (!file_exists($filename)) {
    $zip->open($filename, ZipArchive::CREATE);//创建一个空的zip文件
    for ($i = 0; $i < count($fileNameArr); $i++) {
        $zip->addFile($fileNameArr[$i]['file'], iconv( 'UTF-8','GB2312', $fileNameArr[$i]['name']).'.'.$fileNameArr[$i]['ext']);
    }
    $zip->close();
    //打开文件
    if(file_exists($filename)){
        $file = fopen($filename,"r");
        Header("Content-type: application/octet-stream");
        Header("Accept-Ranges: bytes");
        Header("Accept-Length: ".filesize($filename));
        Header("Content-Disposition: attachment; filename=".$name);
        echo fread($file, filesize($filename));
        $buffer=1024;
        while (!feof($file)) {
            $file_data=fread($file,$buffer);
            echo $file_data;
        }
        fclose($file);
    }else {
        echo "<script>alert('file not exists!');</script>";
    }
}
unlink($filename);
exit();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值