• php生成zip压缩文件的方法,支持文件和压缩包路径查找


    /*
    *    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;
            }
        }
    }

    本文来源于王业楼的个人博客 本文地址:http://www.ly89.cn/detailB/50.html

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

  • 相关阅读:
    SQL综合练习(一)
    数据探索及数据处理&文本数据的处理(二)
    数据探索及数据处理&文本数据的处理(一)
    交叉验证cross_validation
    优惠券预测——特征工程
    优惠券预测——数据探索2
    优惠券预测——数据探索1
    C盘扩容
    tracert在网络中的使用
    网络故障篇
  • 原文地址:https://www.cnblogs.com/ly89cn/p/4855814.html
Copyright © 2020-2023  润新知