thinkphp文件夹生成zip压缩包

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

php 复制代码
<?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

二、在控制器中使用

php 复制代码
//文件夹打包
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);
}

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

相关推荐
挨踢攻城7 小时前
华为 | SD-WAN场景丢包类问题定位
网络·华为·php·hcie·hcia·hcip·厦门微思网络
fakaifa12 小时前
【最新版】CRMEB Pro版v3.4系统源码全开源+PC端+uniapp前端+搭建教程
人工智能·小程序·uni-app·php·crmeb·源码下载·crmebpro
lingggggaaaa16 小时前
小迪安全v2023学习笔记(六十二讲)—— PHP框架反序列化
笔记·学习·安全·web安全·网络安全·php·反序列化
Q_Q19632884751 天前
python的电影院座位管理可视化数据分析系统
开发语言·spring boot·python·django·flask·node.js·php
Ashlee_code1 天前
香港券商智能櫃台系統技術解決方案——融合跨境清算與AI風控,助力券商把握滬港雙市爆發機遇**
java·科技·金融·重构·架构·系统架构·php
nightunderblackcat1 天前
进阶向:人物关系三元组,解锁人物关系网络的钥匙
开发语言·python·开源·php
向日葵.2 天前
fastdds.ignore_local_endpoints 属性
服务器·网络·php
dog2502 天前
难以超越的 TCP AIMD
网络协议·tcp/ip·php
檀越剑指大厂2 天前
【Linux系列】如何在 Linux 服务器上快速获取公网
linux·服务器·php
Q_Q5110082852 天前
python的软件工程与项目管理课程组学习系统
spring boot·python·django·flask·node.js·php·软件工程