/*
* 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生成zip压缩文件的方法附详细代码
php实现在线解压zip压缩文件
简单的php创建zip压缩文件的方法