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
欢迎分享本文,转载请注明本文出处和地址
php生成zip压缩文件的方法,支持文件和压缩包路径查找的更多相关文章
- PHP生成ZIP压缩文件
PHP生成ZIP压缩文件 /* * 生成zip压缩文件 * $sourceDir:被压缩的文件夹或文件 * $outFileName:输出的压缩文件名称 * */ function createZip ...
- java生成zip压缩文件,解压缩文件
1.生成zip public static void main(String[] args) { try { // testZip("c:\\temp.txt", "c: ...
- java直接生成zip压缩文件精简代码(跳过txt文件)
/** * @param args */ public static void main(String[] args) throws Exception{ ZipOutputStream zos = ...
- java调用删除文件的方法删除文件,却删除不干净
场景: 程序中在做数据下载时,生成了一个临时文件夹.夹子里面有一些txt和其他格式文件. 数据下载完毕后,需要删除这个临时文件夹,但是一直删除不干净,总会有一下文件残留. 网搜到了这个问题的原因: 内 ...
- Linux系统Zip压缩和解压缩
Linux系统可以使用Zip来压缩占用空间较大的文件以便进行文件传输,传输完成后再进行解压缩来获取原文件.Linux安装Zip的命令为 apt-get install zip 安装完成后,使用 zip ...
- 文件 open 方法
文件对象方法: 文件对象方法 执行操作 f.close() 关闭文件 f.read([size=-1]) 从文件读取size个字符,当未给定size或给定负值的时候, 读取剩余的所有字符,然后 ...
- 八、Android学习第七天——XML文件解析方法(转)
(转自:http://wenku.baidu.com/view/af39b3164431b90d6c85c72f.html) 八.Android学习第七天——XML文件解析方法 XML文件:exten ...
- linux下执行.sh文件的方法和语法
linux下执行.sh文件的方法 .sh文件就是文本文件,如果要执行,需要使用chmod a+x xxx.sh来给可执行权限. 是bash脚本么 可以用touch test.sh ...
- Python 文件 tell() 方法
描述 Python 文件 tell() 方法返回文件的当前位置,即文件指针当前位置. 语法 tell() 方法语法如下: fileObject.tell() 参数 无 返回值 返回文件的当前位置. 实 ...
随机推荐
- Spring boot中应用jpa jpa用法
https://blog.csdn.net/u012582402/article/details/78717705
- 项目模板eShopOnContainers
.NET Core多平台项目模板eShopOnContainers编译手记 之前写了一个功能性的文件上传asp.net core的小程序,加上点七七八八的东西,勉强能够应付了,打算学习一下微软的官 ...
- Linux清空屏幕和清空当前输入的快捷键
Linux清空屏幕和清空当前输入的快捷键 但是实际上...放弃当前的命令,命令行提示符跳到下一行的有效命令是ctrl + c
- PHP开发环境及搭建
自学PHP中,很多东西都不熟悉,在此做个记录,方便以后再次搭建PHP环境.这篇文章基本按照原文 ThinkPHP5开发环境安装和配置 ,在此感谢该作者 一.实验目的 1.掌握ThinkPHP5(简称 ...
- fileReader 上传图片
function getImgSrc(target, callback) { if (window.FileReader) { var oPreviewImg = null, oFReader = n ...
- EF 记录执行的sql语句
最近做了个中等的项目,数据不会很多,开发时间比较紧迫,所以用了EF的框架. 在使用过程中,发现有时候执行的结果不如预期,想看看执行的sql语句为何,遍查找资料,在网上找到了相关辅助类,拿来使用,部署到 ...
- Spring的七种事务传播机制
概述 当我们调用一个基于Spring的Service接口方法(如UserService#addUser())时,它将运行于Spring管理的事务环境中,Service接口方法可能会在内部调用其它的Se ...
- PC端和手机端页面的一丢丢区别
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8 ...
- 用jQuery实现jsonp跨域
跨域的安全限制都是指浏览器端来说的.服务器端是不存在跨域安全限制的,所以通过本机服务器端通过类似httpclient方式完成“跨域访问”的工作,然后在浏览器端用AJAX获取本机服务器端“跨域访问”对应 ...
- centos 安装 rtmp nginx 视频流服务器
---恢复内容开始--- 1.使用yum安装git yum -y install git 2.下载nginx-rtmp-module,官方github地址 // 通过git clone 的方式下载到服 ...