/**
* @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. Private jre vs Public jre

    今天说一下java环境构建中,jre相关的小知识点. private jre:一般是C:\Program Files\jdk1.8.0\jre,必须安装,它为jdk的运行提供必需的环境. public ...

  2. ubuntu 16.04 编译安装 python3.9

    下载 python包 wget https://www.python.org/ftp/python/3.9.1/Python-3.9.1.tgz 解压 tar zxf Python-3.9.1.tgz ...

  3. [日常摸鱼]bzoj1470[noi2002]Savage

    晚上做到的一个扩欧的水题(?) wa了好几发感觉自己药丸-重新推了一遍公式才发现自己打错了orz 借此复习一下扩欧吧-orz 题目:http://www.lydsy.com/JudgeOnline/p ...

  4. Kafka 消费组消费者分配策略

    body { margin: 0 auto; font: 13px / 1 Helvetica, Arial, sans-serif; color: rgba(68, 68, 68, 1); padd ...

  5. Linux 时间同步 02 ntpd、ntpdate的区别

    Linux 时间同步 02 ntpd.ntpdate的区别 目录 Linux 时间同步 02 ntpd.ntpdate的区别 [一]这样做不安全. [二]这样做不精确. [三]这样做不够优雅. ntp ...

  6. 容器编排系统K8s之flannel网络模型

    前文我们聊到了k8s上webui的安装和相关用户授权,回顾请参考:https://www.cnblogs.com/qiuhom-1874/p/14222930.html:今天我们来聊一聊k8s上的网络 ...

  7. 为什么Java中lambda表达式不能改变外部变量的值,也不能定义自己的同名的本地变量呢?

    作者:blindpirate链接:https://www.zhihu.com/question/361639494/answer/948286842来源:知乎著作权归作者所有.商业转载请联系作者获得授 ...

  8. vue项目中的字符串每隔4位一个空格

    项目中遇到现实银行卡号的需求所以需要这个方法 我们这里运用 JavaScript replace()方法 replace() 方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子 ...

  9. linux resolver

    linux resolver 概要 解析域名,由libresolv提供,用法参见man 3 resolver 配置文件,resolv.conf(参看 man 5 resolv.conf)配置dns s ...

  10. 不吹不黑,jupyter lab 3.0客观使用体验

    1 简介 jupyter lab于近期发布了其具有里程碑意义的3.0版本,随之带来的一些重要新特性,想必广大读者朋友已在各大公众号所翻译转载的jupyter lab团队官方介绍文章中知晓了很多. 图1 ...