PHP的zip、unzip类详解

  1. 1.打开一个ZIP包,用于读取、写入或修改
  2. open(string $filename [, int $flags])
  3. $filename - 文件名
  4. $flags - 打开模式
  5. ZIPARCHIVE::OVERWRITE - 总是以一个新的压缩包开始,此模式下如果已经存在则会被覆盖
  6. ZIPARCHIVE::CREATE - 如果不存在则创建一个zip压缩包
  7. ZIPARCHIVE::EXCL - 如果压缩包已经存在,则出错
  8. ZIPARCHIVE::CHECKCONS - 对压缩包执行额外的一致性检查,如果失败则显示错误
  9. 2.设置zip包的解压密码
  10. setPassword(string $password)
  11. $password - 解压密码
  12. 注意:
  13. 该函数,仅在解压zip包时,设置密码(就是一个zip包加密过,我们使用这个方法,设置解压需要的密码);不能将一个 ‘无密码保护‘ 的zip包,转变为 ‘密码保护‘ 的zip包
  14. /*
  15. 很有必要解释下这个函数!
  16. PHP的 ZipArchive 扩展,不支持:创建一个加密的zip包,只能用于解压一个加密的压缩包
  17. 所以,很多人认为这个方法应该改为 ‘usePassword()‘ !
  18. 不能做的几个事:
  19. 1>不能创建加密的zip包
  20. 2>不能将其他的加密文件,添加到zip包中
  21. 3>不能压缩,解压 ‘AES256‘ 加密方法
  22. 4>使用 ‘getStatusString()‘,抛出可捕捉的错误
  23. */
  24. 3.关闭激活的zip包(已打开的或新创建的),并保存修改。在脚本结束时,会自动调用该方法
  25. close()
  26. 4.从zip包中,提取整个归档或给定的文件,到指定的目录或文件(解压)
  27. extractTo(string $destination [, mixed $entries])
  28. $destination - 提取zip包内容到目标路径(目标)
  29. $entries - 提取zip包的指定文件,接收单个的条目名或多个条目组成的数组(源) --- 不指定,则提取全部!
  30. 5.给ZIP包添加一个空目录
  31. addEmptyDir(string $dirname)
  32. $dirname - 目录路径
  33. 6.给ZIP包添加一个文件
  34. addFile(string $filename [, string $localname = NULL [, int $start = 0 [, int $length = 0]]])
  35. $filename - 添加的文件路径
  36. $localname - 如果提供了,在ZIP包中,会以这个名字作为我们添加文件的文件名
  37. $start - 不使用这个参数,扩展 ‘ZipArchive‘ 需要
  38. $length - 不使用这个参数,扩展 ‘ZipArchive‘ 需要
  39. 示例:
  40. <?php
  41. $zip = new ZipArchive;
  42. if ($zip->open(‘test.zip‘) === TRUE) {
  43. $zip->addFile(‘/path/to/index.txt‘, ‘newname.txt‘);      // index.txt在zip包的名字是newname.txt
  44. $zip->close();
  45. echo ‘ok‘;
  46. } else {
  47. echo ‘failed‘;
  48. }
  49. ?>
  50. 注意:
  51. 当添加文件到zip包中,php会锁定该文件。只有当ZipArchive对象关闭了,才会释放锁定。可通过:ZipArchive::close()或销毁ZipArchive对象。这导致只有锁定被释放,我们才能删除该文件!
  52. 7.将文件的内容,添加到zip包(自然,需要我们来指定zip包中,内容应该添加到哪个文件)
  53. addFromString(string $localname, string $contents)
  54. $localname - zip包中的文件名(为了最大的可移植性,建议zip文件的目录分隔符总是使用 ‘/‘)
  55. $contents - 内容字符串
  56. 示例:
  57. <?php
  58. $zip = new ZipArchive;
  59. if ($zip->open(‘test.zip‘) === TRUE) {
  60. $zip->addFromString(‘dir/test.txt‘, ‘file content goes here‘);
  61. $zip->close();
  62. echo ‘ok‘;
  63. } else {
  64. echo ‘failed‘;
  65. }
  66. ?>
  67. 注意:
  68. 1.该函数,会覆盖已存在的文件!
  69. 2.>5.4版本,会递归创建目录
  70. 8.通过 ‘glob‘ 模式匹配,从目录中添加匹配到的文件
  71. addGlob(string $pattern [, int $flags = 0 [, array $options = array()]])
  72. $pattern - glob 模型字符串(两边没有 ‘/‘ 包围)
  73. $flags - glob 标记
  74. $options - 选项的关联数组,有效的选项是:
  75. add_path - 给匹配的文件,添加路径前缀。在执行了 ‘remove_path‘ 和 ‘remove_all_path‘ 操作后,才执行该选项操作
  76. remove_path - 添加到zip包之前,将匹配的文件路径,移除该选项指定的路径前缀
  77. remove_all_path - 只能设置为true,表示删除匹配到的文件的路径前缀,统一添加到zip包的根目录
  78. /*
  79. 寻找与模式匹配的文件路径,返回匹配到的文件路径数组
  80. glob(string $pattern [, int $flags = 0])
  81. $pattern - 模式字符串
  82. $flags - 有效标记有:
  83. GLOB_MARK - 在每个返回的项目中加一个斜线
  84. GLOB_NOSORT - 按照文件在目录中出现的原始顺序返回(不排序)
  85. GLOB_NOCHECK - 如果没有文件匹配则返回用于搜索的模式
  86. GLOB_NOESCAPE - 反斜线不转义元字符
  87. GLOB_BRACE - 扩充 {a,b,c} 来匹配 ‘a‘,‘b‘ 或 ‘c‘
  88. GLOB_ONLYDIR - 仅返回与模式匹配的目录项
  89. GLOB_ERR - 停止并读取错误信息(比如说不可读的目录),默认的情况下忽略所有错误
  90. */
  91. 9.通过 ‘PCRE - Perl兼容正则表达式‘ 模式匹配,从目录中添加匹配到的文件
  92. addPattern(string $pattern [, string $path = ‘.‘ [, array $options = array()]])
  93. $pattern - 正则表达式模式(两边使用 ‘/‘ 包围)
  94. $path - 扫描目录,默认是当前工作目录
  95. $options - 选项的关联数组,有效的选项是:
  96. add_path - 给匹配的文件,添加路径前缀。在执行了 ‘remove_path‘ 和 ‘remove_all_path‘ 操作后,才执行该选项操作
  97. remove_path - 添加到zip包之前,将匹配的文件路径,移除该选项指定的路径前缀
  98. remove_all_path - 只能设置为true,表示删除匹配到的文件的路径前缀,统一添加到zip包的根目录
  99. 10.在zip包内,通过文件索引,删除指定文件
  100. deleteIndex(int $index)
  101. $index - 要删除的文件索引
  102. 11.在zip包内,通过文件名,删除指定文件
  103. deleteName(string $name)
  104. $name - 要删除的文件名
  105. 示例:
  106. <?php
  107. $zip = new ZipArchive;
  108. if ($zip->open(‘test1.zip‘) === TRUE) {
  109. $zip->deleteName(‘testfromfile.php‘);
  110. $zip->deleteName(‘testDir/‘);
  111. $zip->close();
  112. echo ‘ok‘;
  113. } else {
  114. echo ‘failed‘;
  115. }
  116. ?>
  117. 12.通过条目名称,得到条目索引
  118. locateName(string $name [, int $flags])
  119. $name - 要查找的条目名称
  120. $flags - 如何查找,可以事下面2个中的一个,或者设置为 0 - 表示2者都不
  121. 0
  122. ZipArchive::FL_NOCASE
  123. ZipArchive::FL_NODIR
  124. 13.通过条目索引,获取条目名称
  125. getNameIndex(int $index [, int $flags])
  126. $index - 条目索引
  127. $flags - 标志
  128. 设置为 ‘ZipArchive::FL_UNCHANGED‘,返回原始的未改变过的注释
  129. 14.通过条目索引,获取条目的相关信息
  130. statIndex(int $index [, int $flags])
  131. $index - 条目索引
  132. $flags - 标志
  133. 设置为 ‘ZipArchive::FL_UNCHANGED‘,请求原始文件的信息,忽略所有的修改
  134. 15.通过条目名称,获取条目的相关信息
  135. statName(string $name [, int $flags])
  136. $name - 条目名称
  137. $flags - 指定如何进行名称查找。设置为 ‘ZipArchive::FL_UNCHANGED‘,请求原始文件的信息,忽略所有的修改
  138. ZipArchive::FL_NOCASE
  139. ZipArchive::FL_NODIR
  140. ZipArchive::FL_UNCHANGED
  141. 16.通过条目索引,重命名条目
  142. renameIndex(int $index, string $newname)
  143. $index - 要重命名的条目索引
  144. $newname - 新名称
  145. 17.通过条目名称,重命名条目
  146. renameName(string $name, string $newname)
  147. $name - 要重命名的条目名称
  148. $newname - 新名称
  149. 18.通过条目索引,获取条目内容
  150. getFromIndex(int $index [, int $length = 0 [, int $flags]])
  151. $index - 条目索引
  152. $length - 从条目中读取的字节长度。设置为0,表示读取全部
  153. $flags - 打开条目的方式
  154. ZipArchive::FL_UNCHANGED
  155. ZipArchive::FL_COMPRESSED
  156. 19.通过条目名称,获取条目内容
  157. getFromName(string $name [, int $length = 0 [, int $flags]])
  158. $name - 条目名称
  159. $length - 从条目中读取的字节长度。设置为0,表示读取全部
  160. $flags - 查找条目的方法。。。(同上面不一样,上面是:打开条目的方式)
  161. ZipArchive::FL_UNCHANGED
  162. ZipArchive::FL_COMPRESSED
  163. ZipArchive::FL_NOCASE
  164. 20.在zip包中,通过条目索引,设置条目的压缩方法
  165. setCompressionIndex(int $index, int $comp_method [, int $comp_flags = 0])
  166. $index - 条目索引
  167. $comp_method - 压缩方法。可以是ZipArchive::CM_DEFAULT、ZipArchive::CM_STORE或ZipArchive::CM_DEFLATE
  168. $comp_flags - 压缩标志。目前未使用
  169. 21.在zip包中,通过条目名称,设置条目的压缩方法
  170. setCompressionName(string $name, int $comp_method [, int $comp_flags = 0])
  171. $name - 条目名称
  172. $comp_method - 压缩方法。可以是ZipArchive::CM_DEFAULT、ZipArchive::CM_STORE或ZipArchive::CM_DEFLATE
  173. $comp_flags - 压缩标志。目前未使用
  174. 22.获取错误信息、系统信息或zip信息
  175. getStatusString()
  176. 23.通过条目名称,得到条目的一个文件处理句柄(file handler),目前只支持 ‘可读‘
  177. getStream(string $name)
  178. $name - 条目名称
  179. 24.给zip包设置注释
  180. setArchiveComment(string $comment)
  181. $comment - 注释内容
  182. 25.获取zip包注释
  183. getArchiveComment([int $flags])
  184. $flags - 标志
  185. 设置为 ‘ZipArchive::FL_UNCHANGED‘,返回原始的未改变过的注释
  186. 26.在zip包中,通过条目索引,给条目设置注释
  187. setCommentIndex(int $index, string $comment)
  188. $index - 条目索引
  189. $comment - 注释内容
  190. 27.通过条目索引,返回指定条目的注释
  191. getCommentIndex(int $index [, int $flags])
  192. $index - 条目索引
  193. $flags - 标志
  194. 设置为 ‘ZipArchive::FL_UNCHANGED‘,返回原始的未改变过的注释
  195. 28.在zip包中,通过条目名称,给条目设置注释
  196. setCommentName(string $name, string $comment)
  197. $name - 条目名称
  198. $comment - 注释内容
  199. 29.通过条目名称,返回指定条目的注释
  200. getCommentName(string $name [, int $flags])
  201. $name - 条目名称
  202. $flags - 标志
  203. 设置为 ‘ZipArchive::FL_UNCHANGED‘,返回原始的未改变过的注释
  204. 30.在zip包中,通过条目索引,给条目设置额外的属性
  205. setExternalAttributesIndex(int $index, int $opsys, int $attr [, int $flags])
  206. $index - 条目索引
  207. $opsys - ZipArchive::OPSYS_xx 定义的操作系统码
  208. $attr - 额外的属性。属性值取决于操作系统
  209. $flags - 可选的标志。目前未使用
  210. 31.通过条目索引,检索条目额外的属性
  211. getExternalAttributesIndex(int $index, int &$opsys, int &attr [, int $flags])
  212. $index - 条目索引
  213. &$opsys - 成功,返回ZipArchive::OPSYS_xx 定义的操作系统码 - 注意是 ‘&-引用变量,会接收值‘
  214. &$attr - 成功,返回额外的属性。属性值取决于操作系统 - 注意是 ‘&-引用变量,会接收值‘
  215. $flags - 标志
  216. 设置为 ‘ZipArchive::FL_UNCHANGED‘,返回原始的未改变过的注释
  217. 32.在zip包中,通过条目名称,给条目设置额外的属性
  218. setExternalAttributesName(string $name, int $opsys, int $attr [, int $flags])
  219. $name - 条目名称
  220. $opsys - ZipArchive::OPSYS_xx 定义的操作系统码
  221. $attr - 额外的属性。属性值取决于操作系统
  222. $flags - 可选的标志。目前未使用
  223. 33.通过条目名称,检索条目额外的属性
  224. getExternalAttributesName(string $name, int &$opsys, int &attr [, int $flags])
  225. $name - 条目名称
  226. &$opsys - 成功,返回ZipArchive::OPSYS_xx 定义的操作系统码 - 注意是 ‘&-引用变量,会接收值‘
  227. &$attr - 成功,返回额外的属性。属性值取决于操作系统 - 注意是 ‘&-引用变量,会接收值‘
  228. $flags - 标志
  229. 设置为 ‘ZipArchive::FL_UNCHANGED‘,返回原始的未改变过的注释
  230. 34.撤销zip包的所有改变
  231. unchangeAll()
  232. 35.撤销zip包的所有全局改变,当前,只针对 ‘comment - 注释‘
  233. unchangeArchive()
  234. 36.通过条目索引,撤销指定条目的所有改变
  235. unchangeIndex(int $index)
  236. $index - 条目索引
  237. 37.通过条目名称,撤销指定条目的所有改变
  238. unchangeName(string $name)
  239. $name - 条目名称
  240. 38.ZipArchive 使用的类常量。 有以下三类常量:Flags(以 FL_ 为前缀),errors(以 ER_ 为前缀)以及 mode(没有前缀)。
  241. ZIPARCHIVE::CREATE (integer) - 如果不存在则创建一个zip压缩包。
  242. ZIPARCHIVE::OVERWRITE (integer) - 总是以一个新的压缩包开始,此模式下如果已经存在则会被覆盖。
  243. ZIPARCHIVE::EXCL (integer) - 如果压缩包已经存在,则出错。
  244. ZIPARCHIVE::CHECKCONS (integer) - 对压缩包执行额外的一致性检查,如果失败则显示错误。
  245. ZIPARCHIVE::FL_NOCASE (integer) - 查找时忽略名称的大小写。
  246. ZIPARCHIVE::FL_NODIR (integer) - 忽略目录部分
  247. ZIPARCHIVE::FL_COMPRESSED (integer) - 读取压缩数据
  248. ZIPARCHIVE::FL_UNCHANGED (integer) - 使用原始数据,忽略更改。
  249. ZIPARCHIVE::CM_DEFAULT (integer) - 更好的压缩或存储。
  250. ZIPARCHIVE::CM_STORE (integer) - 存储(不压缩)。
  251. ZIPARCHIVE::CM_SHRINK (integer) - 收缩
  252. ZIPARCHIVE::CM_REDUCE_1 (integer) - 用因子1换算
  253. ZIPARCHIVE::CM_REDUCE_2 (integer) - 用因子2换算
  254. ZIPARCHIVE::CM_REDUCE_3 (integer) - 用因子3换算
  255. ZIPARCHIVE::CM_REDUCE_4 (integer) - 用因子4换算
  256. ZIPARCHIVE::CM_IMPLODE (integer) - 聚爆
  257. ZIPARCHIVE::CM_DEFLATE (integer) - deflated
  258. ZIPARCHIVE::CM_DEFLATE64 (integer) - deflate64
  259. ZIPARCHIVE::CM_PKWARE_IMPLODE (integer) - PKWARE imploding
  260. ZIPARCHIVE::CM_BZIP2 (integer) - BZIP2算法
  261. ZIPARCHIVE::ER_OK (integer) - 没有错误。
  262. ZIPARCHIVE::ER_MULTIDISK (integer) - 不支持多磁盘zip压缩包。
  263. ZIPARCHIVE::ER_RENAME (integer) - 重命名临时文件失败。
  264. ZIPARCHIVE::ER_CLOSE (integer) - 关闭zip压缩包失败。
  265. ZIPARCHIVE::ER_SEEK (integer) - 寻址错误
  266. ZIPARCHIVE::ER_READ (integer) - 读取错误
  267. ZIPARCHIVE::ER_WRITE (integer) - 写入错误
  268. ZIPARCHIVE::ER_CRC (integer) - CRC校验失败
  269. ZIPARCHIVE::ER_ZIPCLOSED (integer) - zip压缩包已关闭
  270. ZIPARCHIVE::ER_NOENT (integer) - 没有文件
  271. ZIPARCHIVE::ER_EXISTS (integer) - 文件已经存在
  272. ZIPARCHIVE::ER_OPEN (integer) - 不能打开文件
  273. ZIPARCHIVE::ER_TMPOPEN (integer) - 创建临时文件失败
  274. ZIPARCHIVE::ER_ZLIB (integer) - Zlib错误
  275. ZIPARCHIVE::ER_MEMORY (integer) - 内存分配失败
  276. ZIPARCHIVE::ER_CHANGED (string) - 条目已被改变
  277. ZIPARCHIVE::ER_COMPNOTSUPP (integer) - 不支持的压缩方式
  278. ZIPARCHIVE::ER_EOF (integer) - 过早的EOF
  279. ZIPARCHIVE::ER_INVAL (integer) - 无效的参数
  280. ZIPARCHIVE::ER_NOZIP (integer) - 不是一个zip压缩包
  281. ZIPARCHIVE::ER_INTERNAL (integer) - Internal error
  282. ZIPARCHIVE::ER_INCONS (integer) - Zip压缩包不一致
  283. ZIPARCHIVE::ER_REMOVE (integer) - 不能移除文件
  284. ZIPARCHIVE::ER_DELETED (integer) - 条目已被删除
时间: 2024-10-24 22:41:42

PHP的zip、unzip类详解的相关文章

URLConnection类详解

为了防止无良网站的爬虫抓取文章,特此标识,转载请注明文章出处.LaplaceDemon/SJQ. http://www.cnblogs.com/shijiaqi1066/p/3753224.html URLConnection概述 URLConnection是一个抽象类,表示指向URL指定资源的活动连接. URLConnection类本身依赖于Socket类实现网络连接.一般认为,URLConnection类提供了比Socket类更易于使用.更高级的网络连接抽象.但实际上,大多数程序员都会忽略它

QAction类详解:

先贴一段描述:Qt文档原文: Detailed Description The QAction class provides an abstract user interface action that can be inserted into widgets. In applications many common commands can be invoked via menus, toolbar buttons, and keyboard shortcuts. Since the user

Android技术18:Android中Adapter类详解

1.Adapter设计模式 Android中adapter接口有很多种实现,例如,ArrayAdapter,BaseAdapter,CursorAdapter,SimpleAdapter,SimpleCursorAdapter等,他们分别对应不同的数据源.例如,ArrayAdater对应List和数组数据源,而CursorAdapter对应Cursor对象(一般从数据库中获取的记录集).这些Adapter都需要getView方法返回当前列表项显示的View对象.当Model发生改变时,会调用Ba

C++虚基类详解

1.虚基类的作用从上面的介绍可知:如果一个派生类有多个直接基类,而这些直接基类又有一个共同的基类,则在最终的派生类中会保留该间接共同基类数据成员的多份同名成员.在引用这些同名的成员时,必须在派生类对象名后增加直接基类名,以避免产生二义性,使其惟一地标识一个成员,如    c1.A::display( ).在一个类中保留间接共同基类的多份同名成员,这种现象是人们不希望出现的.C++提供虚基类(virtual base class )的方法,使得在继承间接共同基类时只保留一份成员.现在,将类A声明为

ThreadLocal类详解

众所周知,ThreadLocal对象可以每一个线程保存一份值,可以避免因线程间共享数据带来的问题. 其实现的原理,大致如下,具体的可以参考JDK里的源码. Thread类中,有一个threadLocals字段,它是ThreadLocalMap类型(ThreadLocal里的一个静态内部类).该字段存放当前线程下,所有与ThreadLocal相关的值.该对象是一个Map,key为ThreadLocal对象,value为所存放的值. 在ThreadLocal类里,有两个重要的方法:set()和get

Cocos2d之Node类详解之节点树(二)

一.声明 本文属于笔者原创,允许读者转载和分享,只要注明文章来源即可. 笔者使用cocos2d框架的cocos2d-x-3.3rc0版本的源代码做分析.这篇文章承接上篇<Cocos2d之Node类详解之节点树(一)>. 二.简介 节点 一个Node对象. 节点树 上篇文章介绍到,Node类有一个成员变量 Vector<Node*> _children,这是一个保存所有子节点的数组,因为Node类采用遍历树的方式获取子节点进行渲染,所以我管这两个东西的结合叫节点树. 三.源码详解 &

Android开发之Html类详解

在进行Android开发中经常回忽略Html类.这个类其实很简单,就是将HTML标签文本解析成普通的样式文本.下面就让我么看一下这个类的具体介绍. 类结构: java.lang.Object    ? android.text.Html 类概述: 这个类用于处理的HTML字符串并将其转换成可显示的样式文本.但并不是所有的HTML标记的支持. 公有方法: 说其简单是应为它就有四个方法: Public Methods static String escapeHtml(CharSequence tex

Opencart 之 Registry 类详解

Registry 中文意思是记录,登记,记录本的意思, 在opencart中他的用途就是 登记公共类.类的原型放在 system\engine文件夹下 代码很简单: <?php final class Registry { private $data = array(); public function get($key) { return (isset($this->data[$key]) ? $this->data[$key] : NULL); } public function s

Cocos2d之Node类详解之ZOrder详解

一.声明 笔者以cocos2d框架的cocos2d-x-3.3rc0版本源码做分析.本文属于笔者原创,允许转载和分享,但请注明文章出处. 二.简介 ZOrder ZOrder顾名思义就是节点(Node对象)在Z轴上的排序,这样一来ZOrder越小就越优先显示.每个节点(Node对象)可以持有多个子节点,组成节点树(关于节点树的介绍查看<Cocos2d之Node类详解之节点树>一文).ZOder表示了节点树中每个子节点显示的优先级.值得注意的是,节点树中子节点的ZOder可能会一样,这种情况下父