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) - 条目已被删除 
  • 相关阅读:
    List of the best open source software applications
    Owin对Asp.net Web的扩展
    NSwag给api加上说明
    'workspace' in VS Code
    unable to find valid certification path to requested target
    JMeter的下载以及安装使用
    exception disappear when forgot to await an async method
    Filter execute order in asp.net web api
    记录web api的request以及response(即写log)
    asp.net web api的源码
  • 原文地址:https://www.cnblogs.com/aipiaoborensheng/p/6362858.html
Copyright © 2011-2022 走看看