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