博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
php生成zip压缩文件的方法,支持文件和压缩包路径查找
阅读量:6849 次
发布时间:2019-06-26

本文共 2583 字,大约阅读时间需要 8 分钟。

/**    new creatZip($_dir,$_zipName);*@ _dir是被压缩的文件夹名称,可使用路径,例 'a'或者'a/test.txt'或者'test.txt'*@ _zipName是压缩后的压缩包名称,可使用路径,例 'a/test.zip'或者'test.zip'**/class creatZip {    private $_dir;    private $_zipDir;    private $_zipName;        public function __construct($dir,$zipName) {        $this->_dir = $dir;        $this->_zipDir = basename($dir);        $this->_zipName = $zipName;        $this->mkdirs();        $this->creat();    }    //检测并生成目录    private function mkdirs() {        if (!is_dir(dirname($this->_zipName))) {            $arr = explode('/', dirname($this->_zipName));            $arrs = '';            foreach($arr as $value) {                if (!is_dir($arrs.$value)) {                    if (!!mkdir($arrs.$value)) {                        $arrs .= $value.'/';                    }                }            }        }    }    //生成Zip压缩包    private function creat() {        $zip = new ZipArchive;        if (is_dir($this->_dir)) {            $this->readDir($this->_dir,$files);            if ($zip->open($this->_zipName,ZipArchive::CREATE)) {                foreach ($files as $value) {                    preg_match('/\/('.$this->_zipDir.'\/.*)/', $value, $match);                    if (is_dir($value)) {                        @$zip->addEmptyDir($value, $match[1]);                    } else {                        @$zip->addFile($value, $match[1]);                    }                }                $zip->close();            }        } else {            if ($zip->open($this->_zipName,ZipArchive::CREATE)) {                $zip->addFile($this->_dir, basename($this->_dir));            }        }    }    //读取文件夹所有文件    private function readDir($dir,&$arr) {        if ($dirs = opendir($dir)) {            while (($file=readdir($dirs)) != false) {                if ($file == '.' || $file == '..') continue;                $files = $dir .'/'. $file;                if (is_dir($files) && $this->isEmpty($files)) {                    $this->readDir($files,$arr);                } else {                    $arr[] = $files;                }            }        }        closedir($dirs);    }    //判断文件夹是否为空    private function isEmpty($dir) {        if ($_dirs = opendir($dir)) {            while (($file=readdir($dirs)) != false) {                if($file != '.' && $file != '..') {                    closedir($dirs);                    return true;                    break;                }            }            closedir($dirs);            return false;        }    }}

本文来源于 本文地址:

欢迎分享本文,转载请注明本文出处和地址

转载于:https://www.cnblogs.com/ly89cn/p/4855814.html

你可能感兴趣的文章
redis常用命令及结构
查看>>
Ubuntu下访问Windows中Postgresql
查看>>
mfc模态对话框
查看>>
DirectX 读书笔记(14) Cube mapping之SkyBox[转]
查看>>
移动端web开发初探之Vuejs的简单实战
查看>>
Team Project Proposal for ASE Course---query suggestion by 3D tag cloud
查看>>
IDEA2016.3搭建Struts2+Hibernate+Spring项目环境
查看>>
多线程(一)线程创建的三种方式
查看>>
HDU-4310 Hero 贪心Or动态规划
查看>>
linux软件管理 YUM命令
查看>>
windows下memcache安装及配置
查看>>
第一次作业人工智能
查看>>
labeled LDA,Hierarchically Supervised LDA
查看>>
JavaScript 捕获按键
查看>>
记录Javascript数组的方法参考
查看>>
截图软件
查看>>
关于抽奖概率的问题
查看>>
《鸟哥的私房菜阅读摘要》——linux的简介和计算机基础
查看>>
hql语句的case when then else end问题
查看>>
CF786E ALT
查看>>