thinkphp文件夹生成zip压缩包

一、准备工作,使用phpinfo()查看有没有zip扩展

<?php
echo phpinfo();
?>

Thinkphp使用PHP自带的ZipArchive压缩文件或文件夹
在这里插入图片描述显示enabled 说明已经配置好

如果没有安装扩展的,请参照以下方法:

1、下载对应版本的扩展包:https://windows.php.net/downloads/pecl/releases/zip/1.20.0/,比如我是php7.4(window7_64位系统),则下载如下:
在这里插入图片描述Thinkphp使用PHP自带的ZipArchive压缩文件或文件夹

2、把解压的php_zip.dll文件放到php-5.6.27-nts/ext目录

3、在php.ini添加以下配置:

extension=php_zip.dll

4、重启Apache

二、在控制器中使用

//文件夹打包
public function zip()
{
    $local = app()->getRootPath().'\public';
    try {
        //文件夹目录
        $dirPath = $local."\demo";
        //zip压缩包保存路径
        $zipPath = $local."\demo.zip";
        //创建zip实例
        $zip=new \ZipArchive();
        if($zip->open($zipPath, \ZipArchive::CREATE|\ZipArchive::OVERWRITE)=== TRUE) {
            //调用方法,对要打包的根目录进行操作,并将ZipArchive的对象传递给方法
            $this->addFileToZip($zip,$dirPath,$dirPath);
            //关闭处理的zip文件
            $zip->close();
        }
    }
    catch (\Exception $e) {
    	//echo '压缩失败';
        halt($e);
    }
    //echo '压缩成功';
    
    $this->downloadZip($zipPath);
}


//下载function
public function downloadZip($zipPath)
{
    $zipPath = iconv("UTF-8", "GBK", $zipPath);//加这行中文文件夹也ok了
    header("Cache-Control: public");
    header("Content-Description: File Transfer");
    header('Content-disposition: attachment; filename=' . basename($zipPath)); //文件名
    header("Content-Type: application/zip"); //zip格式的
    header("Content-Transfer-Encoding: binary"); //告诉浏览器,这是二进制文件
    header('Content-Length: ' . filesize($zipPath)); //告诉浏览器,文件大小
    @readfile($zipPath);//ob_end_clean();
    @unlink(app()->getRootPath().'public/'.$zipPath);//删除压缩包
}

//压缩包追加文件
public function addFileToZip($zip,$path,$root){
   $handler=opendir($path); //打开当前文件夹
   while(($filename=readdir($handler))!==false){
       if($filename != "." && $filename != ".."){//不操作名字为'.'和'..'的文件夹或文件
           if(is_dir($path."/".$filename)){// 如果读取的某个对象是文件夹,则递归
               $this->addFileToZip($zip,$path."/".$filename,$root);
           }else{
               //将文件加入zip对象,第二个参数是zip里文件的路径
               $pathFilename=$path . "/" . $filename;
               $zip->addFile($pathFilename, str_replace($root.'/','',$pathFilename));
           }
       }
   }
   //@closedir($path);
}

小伙伴们,以上亲测有效,记得关注

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/177363.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

还不知道指针和引用的区别,一篇文章教会你

1、引用的概念 1.引用不是新定义一个变量&#xff0c;而是给已存在变量取了一个别名 2.编译器不会为引用变量开辟内存空间&#xff0c;它和它引用的变量共用同一块内存空间 比如:孙悟空&#xff0c;可以叫他孙悟空&#xff0c;也可以叫齐天大圣。本质他们就是一个人 2、引用的定…

opencv- CLAHE 有限对比适应性直方图均衡化

CLAHE&#xff08;Contrast Limited Adaptive Histogram Equalization&#xff09;是一种对比度有限的自适应直方图均衡化技术&#xff0c;它能够提高图像的对比度而又避免过度增强噪声。 在OpenCV中&#xff0c;cv2.createCLAHE() 函数用于创建CLAHE对象&#xff0c;然后可以…

Python 安装win32com失败

今天进行服务器迁移&#xff0c; 中间有用的python调用win32com组件让docx转换成pdf。不出意外的话出意外了&#xff0c;pip安装win32com的时候各种安装不上&#xff0c; 今天处理完问题之后&#xff0c;记录一下&#xff0c;与人方便与己方便。 在cmd上面&#xff0c;一开始…

配置静态 Eth-trunk

1、需求 1&#xff09;交换网络中存在2个 VLAN – 10 和 20 2&#xff09;每个VLAN的IP地址为&#xff1a;192.168.xx.0/24&#xff08;xx为 vlan 号&#xff09; 3&#xff09;对交换机之间的链路进行链路捆绑&#xff0c;增加互联带宽 4&#xff09;确保同 VLAN的 PC 之间互…

static和extern

1.extern extern 是⽤来声明外部符号的&#xff0c;如果⼀个全局的符号在A⽂件中定义的&#xff0c;在B⽂件中想使⽤&#xff0c;就可以使⽤ extern 进⾏声明&#xff0c;然后使⽤。 即在一个源文件中想要使用另一个源文件&#xff0c;即可通过这个extern来声明使用。 2.st…

基于STC12C5A60S2系列1T 8051单片机的液晶显示器LCD1602显示用户自定义字符应用

基于基于STC12C5A60S2系列1T 8051单片机的液晶显示器LCD1602显示两行常规字符应用 STC12C5A60S2系列1T 8051单片机管脚图STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式及配置STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式介绍液晶显示器LCD1602简单介绍通过液晶显…

规则引擎Drools使用,0基础入门规则引擎Drools(一)基础入门

文章目录 系列文章索引一、规则引擎概述1、引出问题2、什么是规则引擎3、使用规则引擎的优势4、规则引擎应用场景 二、Drools介绍1、Drools概述2、Drools构成3、相关概念说明4、Drools执行过程5、KIE介绍 三、Drools入门案例1、业务场景说明2、开发实现 四、Drools基础语法1、规…

webpack plugin

1、基本写法及使用 这里用到 emit 钩子 及make 钩子&#xff0c;前者是串行后者是并行 /*** 1.webpack加载webpack.config.js中所有配置&#xff0c;此时就会new TestPlugin()&#xff0c;执行插件的constructor2.webpack创建compiler对象3.遍历所有plugins中插件&#xff0…

jQuery的学习(一篇文章齐全)

目录 Day29 jQuery 1、jQuery介绍 2、jQuery的选择器 2.1、直接查找 2.2、导航查找 3、jQuery的绑定事件 案例1&#xff1a;绑定取消事件 案例2&#xff1a;模拟事件触发 4、jQuery的操作标签 tab切换案例jQuery版本&#xff1a; 案例1&#xff1a; 案例2&#xff…

ios打包,证书获取

HBuilderX 打包ios界面&#xff1a; Bundle ID(AppID)&#xff1a; 又称应用ID&#xff0c;是每一个ios应用的唯一标识&#xff0c;就像一个人的身份证号码&#xff1b; 每开发一个新应用&#xff0c;首先都需要先去创建一个Bundle ID Bundle ID 格式&#xff1a; 一般为&…

数据治理之考评指标类

正则表达式 [] 表述一个字符应该是什么样子 [abc] 表示一个字符可以是a\b\c[a-z] 表示所有小写[a-zA-Z]所有大小写[ a-zA-Z0-9_ ] 所有大小写字母及数字和下划线 -> \w[0-9] \d\s 空格. 表示任意字符 {} 表示有多少个这样的字符 [a-z]{1,10}最少有一个&#xff0c;最多有10…

虚拟机VMware+Ubuntu系统的自定义安装教程(详细图文教程)

VMware可以帮助你在一个操作系统的环境下安装和运行另一个操作系统&#xff0c;从而提高IT效率&#xff0c;降低运维成本&#xff0c;加快工作负载部署速度&#xff0c;提高应用性能&#xff0c;提高服务器可用性&#xff0c;消除服务器数量剧增情况和复杂性。 目录 一、VMwar…

python爬虫教程:selenium常用API用法和浏览器控制

文章目录 selenium apiwebdriver常用APIwebelement常用API 控制浏览器 selenium api selenium新版本(4.8.2)很多函数&#xff0c;包括元素定位、很多API方法均发生变化&#xff0c;本文记录以selenium4.8.2为准。 webdriver常用API 方法描述get(String url)访问目标url地址&…

Redis的持久化(新)

Redis中数据都保存在内存&#xff0c;但是内存中的数据变换很快&#xff0c;也很容易丢失&#xff0c;比如连接断开、宕机停机等等。而Redis提供的数据持久化机制有RDB(Redis DataBase)和AOF(Append Only File)。 1.RDB RDB是指在指定的时间间隔内将内存中的数据集快照写入到磁…

python-opencv划痕检测-续

python-opencv划痕检测-续 这次划痕检测&#xff0c;是上一次划痕检测的续集。 处理的图像如下&#xff1a; 这次划痕检测&#xff0c;我们经过如下几步: 第一步&#xff1a;读取灰度图像 第二步&#xff1a;进行均值滤波 第三步&#xff1a;进行图像差分 第四步&#xff1…

Web前端—移动Web第四天(媒体查询、Bootstrap、综合案例-alloyTeam)

版本说明 当前版本号[20231122]。 版本修改说明20231122初版 目录 文章目录 版本说明目录移动 Web 第五天01-媒体查询基本写法书写顺序案例-左侧隐藏媒体查询-完整写法关键词 / 逻辑操作符媒体类型媒体特性 媒体查询-外部CSS 02-Bootstrap简介使用步骤下载使用 栅格系统全局…

解决 requests 库中 verify 属性问题的方法

在使用 Python 的 requests 库进行网络请求时&#xff0c;我们常常需要确保通信的安全性&#xff0c;这涉及到验证服务器的 SSL/TLS 证书。 这个问题的背后是 requests 库的设计&#xff0c;为了解决这个问题&#xff0c;我们可以考虑修改 requests 库的源代码&#xff0c;以确…

webGL技术开发的软件类型

WebGL 是一种在浏览器中渲染 2D 和 3D 图形的 JavaScript API。通过 WebGL&#xff0c;你可以创建各种类型的软件项目&#xff0c;特别是那些需要强大图形渲染能力的项目。以下是一些你可以使用 WebGL 实现的软件项目类型&#xff0c;希望对大家有所帮助。北京木奇移动技术有限…

shell 条件语句

目录 测试 test测试文件的表达式 是否成立 格式 选项 比较整数数值 格式 选项 字符串比较 常用的测试操作符 格式 逻辑测试 格式 且 &#xff08;全真才为真&#xff09; 或 &#xff08;一真即为真&#xff09; 常见条件 双中括号 [[ expression ]] 用法 &…

虚拟主播解决方案

虚拟主播作为一种新兴的技术&#xff0c;正在逐渐改变我们的生活和工作方式。美摄科技&#xff0c;作为行业的领导者&#xff0c;致力于为企业提供一站式的虚拟主播技术解决方案&#xff0c;帮助企业实现数字化转型。 美摄科技的虚拟主播解决方案&#xff0c;是一种将文本内容…