PHP的zip、unzip类详解

项目涉及到一个压缩、解压,打算使用zip压缩,就看了下手册的ZipArchive,总结了下,当过一篇,大概了解,希望对大家有帮助,觉得好的点个赞!哈哈!

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) - 条目已被删除


  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值