PHP的zip、unzip类详解
- 1.打开一个ZIP包,用于读取、写入或修改
- open(string $filename [, int $flags])
- $filename - 文件名
- $flags - 打开模式
- ZIPARCHIVE::OVERWRITE - 总是以一个新的压缩包开始,此模式下如果已经存在则会被覆盖
- ZIPARCHIVE::CREATE - 如果不存在则创建一个zip压缩包
- ZIPARCHIVE::EXCL - 如果压缩包已经存在,则出错
- ZIPARCHIVE::CHECKCONS - 对压缩包执行额外的一致性检查,如果失败则显示错误
- 2.设置zip包的解压密码
- setPassword(string $password)
- $password - 解压密码
- 注意:
- 该函数,仅在解压zip包时,设置密码(就是一个zip包加密过,我们使用这个方法,设置解压需要的密码);不能将一个 '无密码保护' 的zip包,转变为 '密码保护' 的zip包
- /*
- 很有必要解释下这个函数!
- PHP的 ZipArchive 扩展,不支持:创建一个加密的zip包,只能用于解压一个加密的压缩包
- 所以,很多人认为这个方法应该改为 'usePassword()' !
- 不能做的几个事:
- 1>不能创建加密的zip包
- 2>不能将其他的加密文件,添加到zip包中
- 3>不能压缩,解压 'AES256' 加密方法
- 4>使用 'getStatusString()',抛出可捕捉的错误
- */
- 3.关闭激活的zip包(已打开的或新创建的),并保存修改。在脚本结束时,会自动调用该方法
- close()
- 4.从zip包中,提取整个归档或给定的文件,到指定的目录或文件(解压)
- extractTo(string $destination [, mixed $entries])
- $destination - 提取zip包内容到目标路径(目标)
- $entries - 提取zip包的指定文件,接收单个的条目名或多个条目组成的数组(源) --- 不指定,则提取全部!
- 5.给ZIP包添加一个空目录
- addEmptyDir(string $dirname)
- $dirname - 目录路径
- 6.给ZIP包添加一个文件
- addFile(string $filename [, string $localname = NULL [, int $start = 0 [, int $length = 0]]])
- $filename - 添加的文件路径
- $localname - 如果提供了,在ZIP包中,会以这个名字作为我们添加文件的文件名
- $start - 不使用这个参数,扩展 'ZipArchive' 需要
- $length - 不使用这个参数,扩展 'ZipArchive' 需要
- 示例:
- <?php
- $zip = new ZipArchive;
- if ($zip->open('test.zip') === TRUE) {
- $zip->addFile('/path/to/index.txt', 'newname.txt'); // index.txt在zip包的名字是newname.txt
- $zip->close();
- echo 'ok';
- } else {
- echo 'failed';
- }
- ?>
- 注意:
- 当添加文件到zip包中,php会锁定该文件。只有当ZipArchive对象关闭了,才会释放锁定。可通过:ZipArchive::close()或销毁ZipArchive对象。这导致只有锁定被释放,我们才能删除该文件!
- 7.将文件的内容,添加到zip包(自然,需要我们来指定zip包中,内容应该添加到哪个文件)
- addFromString(string $localname, string $contents)
- $localname - zip包中的文件名(为了最大的可移植性,建议zip文件的目录分隔符总是使用 '/')
- $contents - 内容字符串
- 示例:
- <?php
- $zip = new ZipArchive;
- if ($zip->open('test.zip') === TRUE) {
- $zip->addFromString('dir/test.txt', 'file content goes here');
- $zip->close();
- echo 'ok';
- } else {
- echo 'failed';
- }
- ?>
- 注意:
- 1.该函数,会覆盖已存在的文件!
- 2.>5.4版本,会递归创建目录
- 8.通过 'glob' 模式匹配,从目录中添加匹配到的文件
- addGlob(string $pattern [, int $flags = 0 [, array $options = array()]])
- $pattern - glob 模型字符串(两边没有 '/' 包围)
- $flags - glob 标记
- $options - 选项的关联数组,有效的选项是:
- add_path - 给匹配的文件,添加路径前缀。在执行了 'remove_path' 和 'remove_all_path' 操作后,才执行该选项操作
- remove_path - 添加到zip包之前,将匹配的文件路径,移除该选项指定的路径前缀
- remove_all_path - 只能设置为true,表示删除匹配到的文件的路径前缀,统一添加到zip包的根目录
- /*
- 寻找与模式匹配的文件路径,返回匹配到的文件路径数组
- glob(string $pattern [, int $flags = 0])
- $pattern - 模式字符串
- $flags - 有效标记有:
- GLOB_MARK - 在每个返回的项目中加一个斜线
- GLOB_NOSORT - 按照文件在目录中出现的原始顺序返回(不排序)
- GLOB_NOCHECK - 如果没有文件匹配则返回用于搜索的模式
- GLOB_NOESCAPE - 反斜线不转义元字符
- GLOB_BRACE - 扩充 {a,b,c} 来匹配 'a','b' 或 'c'
- GLOB_ONLYDIR - 仅返回与模式匹配的目录项
- GLOB_ERR - 停止并读取错误信息(比如说不可读的目录),默认的情况下忽略所有错误
- */
- 9.通过 'PCRE - Perl兼容正则表达式' 模式匹配,从目录中添加匹配到的文件
- addPattern(string $pattern [, string $path = '.' [, array $options = array()]])
- $pattern - 正则表达式模式(两边使用 '/' 包围)
- $path - 扫描目录,默认是当前工作目录
- $options - 选项的关联数组,有效的选项是:
- add_path - 给匹配的文件,添加路径前缀。在执行了 'remove_path' 和 'remove_all_path' 操作后,才执行该选项操作
- remove_path - 添加到zip包之前,将匹配的文件路径,移除该选项指定的路径前缀
- remove_all_path - 只能设置为true,表示删除匹配到的文件的路径前缀,统一添加到zip包的根目录
- 10.在zip包内,通过文件索引,删除指定文件
- deleteIndex(int $index)
- $index - 要删除的文件索引
- 11.在zip包内,通过文件名,删除指定文件
- deleteName(string $name)
- $name - 要删除的文件名
- 示例:
- <?php
- $zip = new ZipArchive;
- if ($zip->open('test1.zip') === TRUE) {
- $zip->deleteName('testfromfile.php');
- $zip->deleteName('testDir/');
- $zip->close();
- echo 'ok';
- } else {
- echo 'failed';
- }
- ?>
- 12.通过条目名称,得到条目索引
- locateName(string $name [, int $flags])
- $name - 要查找的条目名称
- $flags - 如何查找,可以事下面2个中的一个,或者设置为 0 - 表示2者都不
- 0
- ZipArchive::FL_NOCASE
- ZipArchive::FL_NODIR
- 13.通过条目索引,获取条目名称
- getNameIndex(int $index [, int $flags])
- $index - 条目索引
- $flags - 标志
- 设置为 'ZipArchive::FL_UNCHANGED',返回原始的未改变过的注释
- 14.通过条目索引,获取条目的相关信息
- statIndex(int $index [, int $flags])
- $index - 条目索引
- $flags - 标志
- 设置为 'ZipArchive::FL_UNCHANGED',请求原始文件的信息,忽略所有的修改
- 15.通过条目名称,获取条目的相关信息
- statName(string $name [, int $flags])
- $name - 条目名称
- $flags - 指定如何进行名称查找。设置为 'ZipArchive::FL_UNCHANGED',请求原始文件的信息,忽略所有的修改
- ZipArchive::FL_NOCASE
- ZipArchive::FL_NODIR
- ZipArchive::FL_UNCHANGED
- 16.通过条目索引,重命名条目
- renameIndex(int $index, string $newname)
- $index - 要重命名的条目索引
- $newname - 新名称
- 17.通过条目名称,重命名条目
- renameName(string $name, string $newname)
- $name - 要重命名的条目名称
- $newname - 新名称
- 18.通过条目索引,获取条目内容
- getFromIndex(int $index [, int $length = 0 [, int $flags]])
- $index - 条目索引
- $length - 从条目中读取的字节长度。设置为0,表示读取全部
- $flags - 打开条目的方式
- ZipArchive::FL_UNCHANGED
- ZipArchive::FL_COMPRESSED
- 19.通过条目名称,获取条目内容
- getFromName(string $name [, int $length = 0 [, int $flags]])
- $name - 条目名称
- $length - 从条目中读取的字节长度。设置为0,表示读取全部
- $flags - 查找条目的方法。。。(同上面不一样,上面是:打开条目的方式)
- ZipArchive::FL_UNCHANGED
- ZipArchive::FL_COMPRESSED
- ZipArchive::FL_NOCASE
- 20.在zip包中,通过条目索引,设置条目的压缩方法
- setCompressionIndex(int $index, int $comp_method [, int $comp_flags = 0])
- $index - 条目索引
- $comp_method - 压缩方法。可以是ZipArchive::CM_DEFAULT、ZipArchive::CM_STORE或ZipArchive::CM_DEFLATE
- $comp_flags - 压缩标志。目前未使用
- 21.在zip包中,通过条目名称,设置条目的压缩方法
- setCompressionName(string $name, int $comp_method [, int $comp_flags = 0])
- $name - 条目名称
- $comp_method - 压缩方法。可以是ZipArchive::CM_DEFAULT、ZipArchive::CM_STORE或ZipArchive::CM_DEFLATE
- $comp_flags - 压缩标志。目前未使用
- 22.获取错误信息、系统信息或zip信息
- getStatusString()
- 23.通过条目名称,得到条目的一个文件处理句柄(file handler),目前只支持 '可读'
- getStream(string $name)
- $name - 条目名称
- 24.给zip包设置注释
- setArchiveComment(string $comment)
- $comment - 注释内容
- 25.获取zip包注释
- getArchiveComment([int $flags])
- $flags - 标志
- 设置为 'ZipArchive::FL_UNCHANGED',返回原始的未改变过的注释
- 26.在zip包中,通过条目索引,给条目设置注释
- setCommentIndex(int $index, string $comment)
- $index - 条目索引
- $comment - 注释内容
- 27.通过条目索引,返回指定条目的注释
- getCommentIndex(int $index [, int $flags])
- $index - 条目索引
- $flags - 标志
- 设置为 'ZipArchive::FL_UNCHANGED',返回原始的未改变过的注释
- 28.在zip包中,通过条目名称,给条目设置注释
- setCommentName(string $name, string $comment)
- $name - 条目名称
- $comment - 注释内容
- 29.通过条目名称,返回指定条目的注释
- getCommentName(string $name [, int $flags])
- $name - 条目名称
- $flags - 标志
- 设置为 'ZipArchive::FL_UNCHANGED',返回原始的未改变过的注释
- 30.在zip包中,通过条目索引,给条目设置额外的属性
- setExternalAttributesIndex(int $index, int $opsys, int $attr [, int $flags])
- $index - 条目索引
- $opsys - ZipArchive::OPSYS_xx 定义的操作系统码
- $attr - 额外的属性。属性值取决于操作系统
- $flags - 可选的标志。目前未使用
- 31.通过条目索引,检索条目额外的属性
- getExternalAttributesIndex(int $index, int &$opsys, int &attr [, int $flags])
- $index - 条目索引
- &$opsys - 成功,返回ZipArchive::OPSYS_xx 定义的操作系统码 - 注意是 '&-引用变量,会接收值'
- &$attr - 成功,返回额外的属性。属性值取决于操作系统 - 注意是 '&-引用变量,会接收值'
- $flags - 标志
- 设置为 'ZipArchive::FL_UNCHANGED',返回原始的未改变过的注释
- 32.在zip包中,通过条目名称,给条目设置额外的属性
- setExternalAttributesName(string $name, int $opsys, int $attr [, int $flags])
- $name - 条目名称
- $opsys - ZipArchive::OPSYS_xx 定义的操作系统码
- $attr - 额外的属性。属性值取决于操作系统
- $flags - 可选的标志。目前未使用
- 33.通过条目名称,检索条目额外的属性
- getExternalAttributesName(string $name, int &$opsys, int &attr [, int $flags])
- $name - 条目名称
- &$opsys - 成功,返回ZipArchive::OPSYS_xx 定义的操作系统码 - 注意是 '&-引用变量,会接收值'
- &$attr - 成功,返回额外的属性。属性值取决于操作系统 - 注意是 '&-引用变量,会接收值'
- $flags - 标志
- 设置为 'ZipArchive::FL_UNCHANGED',返回原始的未改变过的注释
- 34.撤销zip包的所有改变
- unchangeAll()
- 35.撤销zip包的所有全局改变,当前,只针对 'comment - 注释'
- unchangeArchive()
- 36.通过条目索引,撤销指定条目的所有改变
- unchangeIndex(int $index)
- $index - 条目索引
- 37.通过条目名称,撤销指定条目的所有改变
- unchangeName(string $name)
- $name - 条目名称
- 38.ZipArchive 使用的类常量。 有以下三类常量:Flags(以 FL_ 为前缀),errors(以 ER_ 为前缀)以及 mode(没有前缀)。
- ZIPARCHIVE::CREATE (integer) - 如果不存在则创建一个zip压缩包。
- ZIPARCHIVE::OVERWRITE (integer) - 总是以一个新的压缩包开始,此模式下如果已经存在则会被覆盖。
- ZIPARCHIVE::EXCL (integer) - 如果压缩包已经存在,则出错。
- ZIPARCHIVE::CHECKCONS (integer) - 对压缩包执行额外的一致性检查,如果失败则显示错误。
- ZIPARCHIVE::FL_NOCASE (integer) - 查找时忽略名称的大小写。
- ZIPARCHIVE::FL_NODIR (integer) - 忽略目录部分
- ZIPARCHIVE::FL_COMPRESSED (integer) - 读取压缩数据
- ZIPARCHIVE::FL_UNCHANGED (integer) - 使用原始数据,忽略更改。
- ZIPARCHIVE::CM_DEFAULT (integer) - 更好的压缩或存储。
- ZIPARCHIVE::CM_STORE (integer) - 存储(不压缩)。
- ZIPARCHIVE::CM_SHRINK (integer) - 收缩
- ZIPARCHIVE::CM_REDUCE_1 (integer) - 用因子1换算
- ZIPARCHIVE::CM_REDUCE_2 (integer) - 用因子2换算
- ZIPARCHIVE::CM_REDUCE_3 (integer) - 用因子3换算
- ZIPARCHIVE::CM_REDUCE_4 (integer) - 用因子4换算
- ZIPARCHIVE::CM_IMPLODE (integer) - 聚爆
- ZIPARCHIVE::CM_DEFLATE (integer) - deflated
- ZIPARCHIVE::CM_DEFLATE64 (integer) - deflate64
- ZIPARCHIVE::CM_PKWARE_IMPLODE (integer) - PKWARE imploding
- ZIPARCHIVE::CM_BZIP2 (integer) - BZIP2算法
- ZIPARCHIVE::ER_OK (integer) - 没有错误。
- ZIPARCHIVE::ER_MULTIDISK (integer) - 不支持多磁盘zip压缩包。
- ZIPARCHIVE::ER_RENAME (integer) - 重命名临时文件失败。
- ZIPARCHIVE::ER_CLOSE (integer) - 关闭zip压缩包失败。
- ZIPARCHIVE::ER_SEEK (integer) - 寻址错误
- ZIPARCHIVE::ER_READ (integer) - 读取错误
- ZIPARCHIVE::ER_WRITE (integer) - 写入错误
- ZIPARCHIVE::ER_CRC (integer) - CRC校验失败
- ZIPARCHIVE::ER_ZIPCLOSED (integer) - zip压缩包已关闭
- ZIPARCHIVE::ER_NOENT (integer) - 没有文件
- ZIPARCHIVE::ER_EXISTS (integer) - 文件已经存在
- ZIPARCHIVE::ER_OPEN (integer) - 不能打开文件
- ZIPARCHIVE::ER_TMPOPEN (integer) - 创建临时文件失败
- ZIPARCHIVE::ER_ZLIB (integer) - Zlib错误
- ZIPARCHIVE::ER_MEMORY (integer) - 内存分配失败
- ZIPARCHIVE::ER_CHANGED (string) - 条目已被改变
- ZIPARCHIVE::ER_COMPNOTSUPP (integer) - 不支持的压缩方式
- ZIPARCHIVE::ER_EOF (integer) - 过早的EOF
- ZIPARCHIVE::ER_INVAL (integer) - 无效的参数
- ZIPARCHIVE::ER_NOZIP (integer) - 不是一个zip压缩包
- ZIPARCHIVE::ER_INTERNAL (integer) - Internal error
- ZIPARCHIVE::ER_INCONS (integer) - Zip压缩包不一致
- ZIPARCHIVE::ER_REMOVE (integer) - 不能移除文件
- ZIPARCHIVE::ER_DELETED (integer) - 条目已被删除
PHP的zip、unzip类详解的更多相关文章
- URLConnection类详解-转
转-http://www.cnblogs.com/shijiaqi1066/p/3753224.html 1. URLConnection概述 URLConnection是一个抽象类,表示指向URL指 ...
- java之StringBuffer类详解
StringBuffer 线程安全的可变字符序列. StringBuffer源码分析(JDK1.6): public final class StringBuffer extends Abstract ...
- java之AbstractStringBuilder类详解
目录 AbstractStringBuilder类 字段 构造器 方法 public abstract String toString() 扩充容量 void expandCapacity(in ...
- java之StringBuilder类详解
StringBuilder 非线程安全的可变字符序列 .该类被设计用作StringBuffer的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍).如果可能,建议优先采用该类,因为在 ...
- Java String类详解
Java String类详解 Java字符串类(java.lang.String)是Java中使用最多的类,也是最为特殊的一个类,很多时候,我们对它既熟悉又陌生. 类结构: public final ...
- QAction类详解:
先贴一段描述:Qt文档原文: Detailed Description The QAction class provides an abstract user interface action tha ...
- JAVAEE学习——struts2_01:简介、搭建、架构、配置、action类详解和练习:客户列表
一.struts2是什么 1.概念 2.struts2使用优势以及历史 二.搭建struts2框架 1.导包 (解压缩)struts2-blank.war就会看到 2.书写Action类 public ...
- Struts2-整理笔记(二)常量配置、动态方法调用、Action类详解
1.修改struts2常量配置(3种) 第一种 在str/struts.xml中添加constant标签 <struts> <!-- 如果使用使用动态方法调用和include冲突 - ...
- C# 内置 DateTime类详解
C# 内置 DateTime类详解 摘抄自微软官方文档,用来方便自己查阅:网址:https://msdn.microsoft.com/zh-cn/library/system.datetime(v=v ...
随机推荐
- 转载-WebLogic使用总结
WebLogic使用总结(七)——WebLogic部署Web应用并绑定域名 孤傲苍狼 2015-01-13 15:19 阅读:2472 评论:1 WebLogic使用总结(六)——WebLog ...
- Mac网络连接问题
场景:同一个网络,其他电脑和手机可以访问远程网络端口为443的网站,如博客园,唯独我的电脑不能访问 解决方法:查看路由器的子网掩码和DNS地址,将IP设置为手动,输入ip.子网掩码和DNS即可
- 阿里云EC2+QEMU虚拟机+ROS完全教程!
---恢复内容开始--- 1.安装centos6.5 x64 同时记录,当前centos分配得到的IP,子网掩码,网关,以及MAC!!! 查看IP.mac命令ip add 查看网关命令cat /etc ...
- Maven报错找不到jre
常规配置maven环境变量,报错: The JAVA_HOME environment variable is not defined correctly. This environment vari ...
- 一种新型远距临场机器人 Fusion / Full Body Surrogacy for Collaborative Communication
近日,来自日本庆应大学的机器人专家开发出一种新型远距临场机器人 Fusion,允许操作者远程控制别人的身体来帮助他们完成操作任务.Fusion「栖居」在代理者的背上,具备立体视觉和双声道听觉,可以通过 ...
- 如何分析 WindowsDump:Dump 起源与初始设置
https://www.qcloud.com/community/article/511817 转者注:让我感觉以前看蓝屏都白看了~~~原来蓝屏也可以分析具体原因. 适用场景:Windows 系列系统 ...
- Java反射机制 —— 简单了解
一.概述 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为jav ...
- 39. 在linux下装好Tomcat要给 tomcat/bin/下面所有.sh的文件执行权限
chmod a+x *.sh(赋予可执行的权限)
- c++Builder XE6 MD5 加密算法 BASE64 URL 编码
xe6,xe7 BASE64XE6 MD5 加密算法Delphifunction MD5(const texto: string): string; var idmd5: TIdHashMessage ...
- J2SE 8的Lambda --- functions
functions //1. Runnable 输入参数:无 返回类型void new Thread(() -> System.out.println("In Java8!" ...