博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PHP生成zip压缩包
阅读量:6136 次
发布时间:2019-06-21

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

/**   $res = new MakeZip($dir,$zipName);*@ $dir是被压缩的文件夹名称,可使用路径,例 'a'或者'a/test.txt'或者'test.txt'*@ $zipName是压缩后的压缩包名称,可使用路径,例 'a/test.zip'或者'test.zip'**/class MakeZip {    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/rxbook/p/10273674.html

你可能感兴趣的文章
InfoQ趋势报告:DevOps 和云计算
查看>>
舍弃Python,为什么知乎选用Go重构推荐系统?
查看>>
在soapui上踩过的坑
查看>>
MySQL的字符集和字符编码笔记
查看>>
ntpd同步时间
查看>>
must implement java.io.Serializable hessian
查看>>
Microsoft Licenses Flash Lite for Windows Mobile Users
查看>>
HDOJ 2020 绝对值排序
查看>>
HDOJ/HDU 2560 Buildings(嗯~水题)
查看>>
Maven编译时跳过Test
查看>>
Spring Boot 整合Spring Security 和Swagger2 遇到的问题小结
查看>>
[20170628]12C ORA-54032.txt
查看>>
除以2
查看>>
高可用集群原理解析
查看>>
Nginx配置URL转向tomcat
查看>>
极客Web前端开发资源大荟萃#001
查看>>
让div固定在某个位置
查看>>
Java开发环境Docker镜像
查看>>
从无到有,WebService Apache Axis2初步实践
查看>>
任务调度(一)——jdk自带的Timer
查看>>