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) - 条目已被删除
04-30 08:15