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);
}

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

相关推荐
两个人的幸福5 小时前
Windows 桌面应用自研 PHP 队列(下):完整代码与六大工程化优化
php
BingoGo2 天前
PHP 泛型之殇 泛型 RFC 提案被拒绝
后端·php
JaguarJack2 天前
PHP 泛型之殇 泛型 RFC 提案被拒绝
后端·php
用户3074596982073 天前
PHP 扩展——从入门到理解
php
鹏仔先生4 天前
拷贝漫画APP下载页PHP程序,后台带免费AI写作
php
云水一下4 天前
从零开始学 PHP 系列(一):PHP 的前世今生与开发环境搭建
开发语言·php
xingpanvip4 天前
星盘接口开发文档:本命盘接口指南
android·开发语言·css·php·lua
酉鬼女又兒4 天前
零基础入门计算机网络运输层:端到端通信核心作用、端口号分类规则、复用分用工作机制及UDP与TCP协议全方位对比详解
网络·网络协议·tcp/ip·计算机网络·考研·udp·php
dog2504 天前
不要再继续优化 TCP
网络协议·tcp/ip·php
Channing Lewis4 天前
PHP 解析 Excel 的那些坑:一次“行号错位”引发的数据丢失
开发语言·php·excel