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() 参数 无 返回值 返回文件的当前位置. 实 ...
随机推荐
- Codeforces #564div2 E1(记忆化搜索)
虽然不是正解但毕竟自己做出来了还是记下来吧- 对每个人分别dfs得到其期望,某两维的组合情况有限所以Hash一下避免了MLE. #include <cstdio> #include < ...
- .NET Core使用NLog通过Kafka实现日志收集
微服务日志之.NET Core使用NLog通过Kafka实现日志收集 https://www.cnblogs.com/maxzhang1985/p/9522017.html 一.前言 NET Core ...
- python 6 循环
循环 要计算1+2+3,我们可以直接写表达式: >>> 1 + 2 + 3 6 要计算1+2+3+...+10,勉强也能写出来. 但是,要计算1+2+3+...+10000,直接写表 ...
- TDH-search汇报理解
题目:海量数据查询开头:1.自我介绍:2.题目切入: 什么是海量数据查询?(海量数据,快速,符合要求) 几个常用场景(搜索引擎,百度:话单查询:影像平台,高铁)3.展示目录:架构,案例,平台规划 4. ...
- pytorch 安装错误,报 GLIBCXX_3.4.20 错误
pytorch 从源码安装 链接:http://blog.csdn.net/u012442157/article/details/78134888 发现错误: 解决方案: http://blog.cs ...
- 一步步实现自己的ORM(二)
在第一篇<一步步实现自己的ORM(一)>里,我们用反射获取类名.属性和值,我们用这些信息开发了简单的INSERT方法,在上一篇文章里我们提到主键为什么没有设置成自增长类型,单单从属性里我们 ...
- Runner启动器
Runner启动器的两种创建方式: 实现ApplicationRunner接口,复写run()方法 实现CommandLineRunner接口,复写run()方法 Runner启动器的执行顺序 如果一 ...
- JavaScript判断图片是否已经加载完毕的方法汇总
在网上有很多关于判断图片是否已经加载完毕的文章,但是有的浏览器并不适合,下面小编给大家分享一些有关JavaScript判断图片是否已经加载完毕方法汇总,具体内容如下所示: 一.onload事件 通过监 ...
- swift学习笔记3-4
再牛逼的梦想,也抵不住你傻逼似的坚持! 我跑啊跑啊,为的就是赶上那个被寄予厚望的自己. 三.运算符+表达式 swift允许重载运算符,比如 “+”你可以重载它 后续会详细介绍 赋值运算符 pass 算 ...
- python3 socke 服务端与客户端实现(回炉)
#服务端#!/usr/bin/env python3 # -*- coding:utf-8 -*- from socket import * # 创建socket tcpSerSocket = soc ...