要使用该PHP扩展类,需要(PHP 5 >= 5.2.0, PECL zip >= 1.1.0),部分方法需要 PHP 5.2.+,且php.ini配置支持zip
对于win系统,直接去掉php_zip.dll 扩展的注释,然后重启http服务(IIS或Apache)即可
Linux还没有试验,理论上差别不会很大
功能:
1、解压缩zip文件
2、将文件压缩成zip文件
3、追加文件到zip文件
4、将文件夹打包成zip文件(需要循环添加文件与创建空文件夹)
5、删除压缩文件中的条目
--------------------- ZipArchive对象常用方法介绍 ---------------------
测试约定:
测试文件为text.zip,该压缩文件包含了三个被压缩的文件(hello.txt、word.txt、ooxx.jpg),如下所示
text.zip hello.txt word.txt ooxx.jpg
打开zip文件,以便进一步操作
ZipArchive::open
(PHP 5 >= 5.2.0, PECL zip >= 1.1.0)
mixed ZipArchive::open ( string $filename [, int $flags ] )
第2个参数讲解
ZIPARCHIVE::OVERWRITE 总是创建一个新的文件,如果指定的zip文件存在,则会覆盖掉
ZIPARCHIVE::CREATE 如果指定的zip文件不存在,则新建一个
ZIPARCHIVE::EXCL 如果指定的zip文件存在,则会报错
ZIPARCHIVE::CHECKCONS
返回值:
如果返回值等于下面的属性,表示对应的错误 或者 返回TRUE
$res == ZipArchive::ER_EXISTS File already exists.(文件已经存在)
$res == ZipArchive::ER_INCONS Zip archive inconsistent.(压缩文件不一致)
$res == ZipArchive::ER_INVAL Invalid argument.(无效的参数)
$res == ZipArchive::ER_MEMORY Malloc failure.(内存错误?这个不确定)
$res == ZipArchive::ER_NOENT No such file.(没有这样的文件)
$res == ZipArchive::ER_NOZIP Not a zip archive.(没有一个压缩文件)
$res == ZipArchive::ER_OPEN Can't open file.(不能打开文件)
$res == ZipArchive::ER_READ Read error.(读取错误)
$res == ZipArchive::ER_SEEK Seek error.(查找错误)
<?php $zip = new ZipArchive; $res = $zip->open('test.zip'); if ($res === TRUE) { echo 'ok'; //解压缩到test文件夹 $zip->extractTo('test'); $zip->close(); } else { echo 'failed, code:' . $res; } ?>
根据压缩文件内的列表索引,返回被压缩文件的名称
ZipArchive::getNameIndex
string ZipArchive::getNameIndex ( int $index [, int $flags ] )
<?php $zip = new ZipArchive(); $res = $zip->open('test.zip'); if ($res === TRUE) { var_dump($zip->getNameIndex(0)); // hello.txt var_dump($zip->getNameIndex(1)); // word.txt var_dump($zip->getNameIndex(2)); // ooxx.jpg } else { echo 'failed, code:' . $res; } $zip->close(); ?>
根据压缩内的文件名称,获取该文件的文本流
ZipArchive::getStream
resource ZipArchive::getStream ( string $name )
<?php $zip = new ZipArchive(); $res = $zip->open('test.zip'); if ($res === TRUE) { $stream = $zip->getStream('hello.txt'); } else { echo 'failed, code:' . $res; } $zip->close(); $str = stream_get_contents($stream); //这里注意获取到的文本编码 var_dump($str); ?>
根据压缩文件内的索引(从0开始)修改压缩文件内的文件名
ZipArchive::renameIndex
bool ZipArchive::renameIndex ( int $index , string $newname )
(PHP 5 >= 5.2.0, PECL zip >= 1.5.0)
成功时返回 TRUE, 或者在失败时返回 FALSE。
<?php $zip = new ZipArchive; $res = $zip->open('test.zip'); if ($res === TRUE) { //把压缩文件内第一个文件修改成newname.txt $zip->renameIndex(0,'newname.txt'); $zip->close(); } else { echo 'failed, code:' . $res; } ?>
根据压缩文件内的文件名,修改压缩文件内的文件名
ZipArchive::renameName
(PHP 5 >= 5.2.0, PECL zip >= 1.5.0)
<?php $zip = new ZipArchive; $res = $zip->open('test.zip'); if ($res === TRUE) { //把压缩文件内的word.txt修改成newword.txt $zip->renameName('word.txt','newword.txt'); $zip->close(); } else { echo 'failed, code:' . $res; } ?>
获取压缩文件的注释(zip的文件注释)
ZipArchive::getArchiveComment
(PHP 5 >= 5.2.0, PECL zip >= 1.1.0)
string ZipArchive::getArchiveComment ([ int $flags ] )
参数:ZipArchive::FL_UNCHANGED
如果参数设置为 ZipArchive::FL_UNCHANGED, 返回原始的还没有改变的注释
例如,在处理该压缩文件时,使用setArchiveComment()方法改变或设置注释时
如果加上ZipArchive::FL_UNCHANGED这个参数,则表示获取改变之前的注释内容,否则获取已经改变的注释内容
类似的还有:
ZipArchive::getCommentIndex 根据压缩文件内的文件索引获取【文件注释】
ZipArchive::getCommentName 根据压缩文件内的文件名称获取【文件注释】
注意:这里的是文件注释,不是压缩文件(zip)的注释
设置或修改压缩文件的注释(zip的文件注释)
ZipArchive::setArchiveComment
(PHP 5 >= 5.2.0, PECL zip >= 1.4.0)
bool ZipArchive::setArchiveComment ( string $comment )
<?php $zip = new ZipArchive; $res = $zip->open('test.zip', ZipArchive::CREATE); if ($res === TRUE) { //$zip->addFromString('test.txt', 'file content goes here'); $zip->setArchiveComment('new archive comment'); $zip->close(); echo 'ok'; } else { echo 'failed'; } ?>
根据压缩文件内的索引删除压缩文件内的文件(也就是删除档案内的条目)
ZipArchive::deleteIndex
(PHP 5 >= 5.2.0, PECL zip >= 1.5.0)
一、如何解压缩一个zip文件 extractTo()
$zip = new ZipArchive();
一、如何创建压缩文件? addFromString() addFile()
即是是把一个或多个文件打包成一个zip文件
1、只需要new一个ZipArchive对象
2、然后使用该对象的open方法创建一个zip文件
3、接着使用addFile方法,将要打包的文件写入刚刚创建的zip文件中
4、最后记得关闭该对象
<?php //建立一个新的ZipArchive的对象 $zip = new ZipArchive; $res = $zip->open('test.zip'); //如果打开成功 if ($res === TRUE) { //如果打开失败 } else { //输出出错的代码 echo 'failed, code:' . $res; } $zip->close();
以上所述就是本文的全部内容了,希望能对大家有所帮助。
我正在尝试解压文件使用Java,它正在编译没有任何错误。当我从工具中调用它,并给出文件的绝对目标路径和源路径时,例如:source:d:\data\test.zip destination:d:\data\op\ 我收到了类似访问被拒绝的错误(我有系统的管理访问权限) 堆栈跟踪: 正在提取:测试/新文本文档-复制(2).txt java.io.FileNotFoundException:d:\da
问题内容: 我知道这是一项容易的任务,但是更改代码后它停止工作,并且无法恢复!我实际上使用了两个函数来进行压缩和解压缩,尽管实际上它是“ jar”和“ unjar”,但这并没有太大的区别 任何帮助/建议吗? 创建JarFile时发生错误: 问题答案: 我不知道这是否是您的问题,但是通常最好在完成写入后关闭每个zip条目。 请参阅。 在显示的代码中,不会关闭邮政编码中的最后一个条目。您也不会显示关闭
tar [-]c|x|u|r|t[z|j][v] -f 归档文件 [待打包文件] 将多个文件打包为一个归档文件,可以在打包的同时进行压缩。支持的格式为 tar(归档)、gz(压缩)、bz2(压缩率更高,比较耗时) 操作选项 -c 创建 -x 解包 -u 更新 -r 添加 -t 查看 -d 比较压缩包内文件和文件 -A 将 tar 文件添加到归档文件中 格式选项 -z 使用 gz 压缩格式 -j 使
我有一个正在工作的python模块,它能够读取LZMA压缩的SWF的头,但是它需要一个名为pyLZMA的模块,而这个模块似乎不想安装在我的服务器上,并且让它在本地工作是一个巨大的麻烦,所以如果有PHP解决方案的话,我更希望有一个PHP解决方案。
本文向大家介绍Java实现的zip压缩及解压缩工具类示例,包括了Java实现的zip压缩及解压缩工具类示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Java实现的zip压缩及解压缩工具类。分享给大家供大家参考,具体如下: 更多关于java算法相关内容感兴趣的读者可查看本站专题:《Java文件与目录操作技巧汇总》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》和《J
MinIO服务器允许流式压缩以确保有效的磁盘空间使用。压缩是在飞行中发生的,即对象在写入磁盘之前已被压缩。MinIO klauspost/compress/s2由于其稳定性和性能而使用流式压缩。 该算法专门针对机器生成的内容进行了优化。每个CPU内核的写吞吐量通常至少为300MB / s。解压缩速度通常至少为1GB / s。 这意味着在原始IO低于这些数字的情况下,压缩不仅会减少磁盘使用量,而且有