/**
* @param $path 要压缩的文件夹路径
* @param $filename 要生成的压缩包名称
*/
public function create_zip($path,$filename) {
  $zip = new \ZipArchive();
    if($zip->open($filename.'.zip', \ZipArchive::CREATE | \ZipArchive::OVERWRITE)) {
    $this->addFileToZip($path, $zip);//调用方法,对要打包的根目录进行操作,并将ZipArchive的对象传递给方法
    $zip->close(); //关闭处理的zip文件
  }
}

//递归写入压缩包
public function addFileToZip($path,$zip) {
  $handler = opendir($path); //打开当前文件夹由$path指定。
  while (($filename = readdir($handler)) !== false) {
    if ($filename != "." && $filename != "..") {  //文件夹文件名字为'.'和‘..’,不要对他们进行操作
      if (is_dir($path . "/" . $filename)) {
        $this->addFileToZip($path . "/" . $filename, $zip);
      } else {
        $zip->addFile($path . "/" . $filename);
      }
    }
  }
  @closedir($path);
}

/**
* @param $path 要下载的文件路径
* @param $filename 保存的文件名
*/
public function downloadTemplate($path,$filename){

  header("Content-type:text/html;charset=utf-8");
  if(!file_exists($path)){
    echo "下载文件不存在!";exit; //如果提示这个错误,很可能你的路径不对,可以打印$file_sub_path查看
  }

  $fp=fopen($path,"r");

  $file_size=filesize($path);

  //下载文件需要用到的头

  Header("Content-type: application/octet-stream");

  Header("Accept-Ranges: bytes");

  Header("Accept-Length:".$file_size);

  Header("Content-Disposition: attachment; filename=".$filename);

  $buffer=1024;

  $file_count=0;

  while(!feof($fp) && $file_count<$file_size){
    $file_con=fread($fp,$buffer);
    $file_count+=$buffer;
    echo $file_con;
  }

  fclose($fp); //关闭这个打开的文件
}

$path = 'qrcode/'.$pid.'/'.date('Y-m-d'); //服务器文件路径
$filename = 'qrcode/'.$pid.'/'.date('Y-m-d'); //想要生成的压缩包

//开始压缩文件并且下载到本地
$this->create_zip($path,$path); //我这里生成的压缩包放在同一个目录下面 就不搞多一个路径 + 文件名了
$this->downloadTemplate($filename.'.zip',$pid.date('Y-m-d').'.zip');  // !!!!切记  下载文件不要用ajax  下载文件不要用ajax  下载文件不要用ajax  重要的事情说三遍!

php压缩文件夹并下载到本地的更多相关文章

  1. Java 压缩文件夹工具类(包含解压)

    依赖jar <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons ...

  2. C#利用SharpZipLib解压或压缩文件夹实例操作

    最近要做一个项目涉及到C#中压缩与解压缩的问题的解决方法,大家分享. 这里主要解决文件夹包含文件夹的解压缩问题. )下载SharpZipLib.dll,在http://www.icsharpcode. ...

  3. C#压缩文件夹

    using System;using System.Collections.Generic;using System.Text; ///第三方dllusing ICSharpCode.SharpZip ...

  4. Java使用线程池递归压缩文件夹下面的所有子文件

    本文将介绍Java中利用线程池递归的方式压缩文件夹下面的所有子文件,具体方法如下: Gzip单个文件压缩 对于单个文件使用GZip压缩. package date0805.demo1; import ...

  5. C++复制、压缩文件夹

    之前写过一篇用zlib库来压缩的,但zlib只能压缩文件,我需要压缩文件夹,要想压缩文件夹还得利用zlib库自己写代码,我是真的服了,一个开源库这么不好用. C++复制文件夹也是麻烦事,网上这篇文章: ...

  6. C#压缩文件夹坑~

    dotNet疯狂之路No.29  今天很残酷,明天更残酷,后天很美好,但是绝大部分人是死在明天晚上,只有那些真正的英雄才能见到后天的太阳.  We're here to put a dent in t ...

  7. .net压缩文件夹

    1,引用:using System.IO.Packaging; 2,压缩文件的方法: /// <summary> /// 压缩文件夹到制定的路径 /// </summary> ...

  8. C#压缩文件,C#压缩文件夹,C#获取文件

    using System; using System.Data; using System.Configuration; using System.Collections.Generic; using ...

  9. 使用7zip批量压缩文件夹到不同压缩包

    for /d %%X in (*) do "c:\Program Files\7-Zip\7z.exe" a "%%X.7z" "%%X\" ...

随机推荐

  1. js第二次作业——2019.10.16

    第一题:完成省城市的三级联动(包括湖南省),附代码和效果图. 1 <!DOCTYPE HTML> 2 <html> 3 <head> 4 </head> ...

  2. eclipse中字体、XML字体设置

    [修改编辑区中文字体大小]: Window > Preferences > General > Appearance > Colors and Fonts > Java ...

  3. s2-061 漏洞复现

    0x00 漏洞简介 Apache Struts2框架是一个用于开发Java EE网络应用程序的Web框架.Apache Struts于2020年12月08日披露 S2-061 Struts 远程代码执 ...

  4. 每日CSS_纯CSS制作进度条

    每日CSS_纯CSS制作进度条 2020_12_26 源码 1. 代码解析 1.1 html 代码解析 设置整个容器 <div class="container"> . ...

  5. CentOS7的防火墙以及selinux介绍/安装telnet命令/安装netstat与ifconfig命令

    简介:firewall防火墙的使用 防火墙:主要用户信息安全防护,主要有软件防火墙和硬件防火墙.firewalld防火墙是软件防火墙,在centos7 之前默认采用的防火墙是iptables,而在ce ...

  6. 如何对项目中的问题进行分析——FPGA失败案例小结

    本人最近在做一个小项目,自己取名叫做<基于zedboard的千兆以太网底层设计>,一般我都是写好各模块的verilog代码,确定模块没bug后再做整个系统级联,之后直接先进行综合看看有没有 ...

  7. 基于docker,consul,consul-template, registrator, nginx服务注册发现集群

      介绍 该工程主要实现服务的自动注册发现,从而达到提高运维效率,做到服务的自动发现和动态扩展. 服务注册发现 服务启动后自动被发现 动态变更负载均衡 自动伸缩 工具 1.Registrator 这是 ...

  8. PP主数据-物料主数据

    一.PP物料主数据:PP的物料主数据,是对应到系统的组织架构的,不同的组织层次,都有各自的主数据需要创建. (1),一般数据:一般数据是在集团层面的主数据,主要包括:物料编码.物料描述.辅助计量单位以 ...

  9. 转【深入理解SQL的四种连接-左外连接、右外连接、内连接、全连接】

    转自:https://www.jb51.net/article/39432.htm 1.内联接(典型的联接运算,使用像 =  或 <> 之类的比较运算符).包括相等联接和自然联接.     ...

  10. Linux嵌入式学习-交叉编译mplayer

    http://bbs.gkong.com/archive.aspx?ID=286721