Heim  >  Artikel  >  Backend-Entwicklung  >  通过php生成zip压缩文件,支持文件和压缩包路径查找

通过php生成zip压缩文件,支持文件和压缩包路径查找

PHP中文网
PHP中文网Original
2017-03-25 10:18:151920Durchsuche
/*
*   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;
        }
    }
}

以上就介绍了php生成zip压缩文件的方法,支持文件和压缩包路径查找,包括了读取文件方面的内容,更多相关内容请关注PHP中文网(www.php.cn)!

相关文章:

使用php生成zip压缩文件的方法附详细代码

php实现在线解压zip压缩文件

简单的php创建zip压缩文件的方法

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:PHP扩展总结//待完善Nächster Artikel:PHP pthreads 多线程操作