简单分享一些工作中总结的经验,博客的好处就是,当你需要时,而我刚好分享!

PHP ZipArchive实现压缩跟解压

PHP Liad 397℃
PHP ZipArchive 是php自带的扩展类,可以轻松实现ZIP文件的压缩和解压,使用前首先要确保PHP ZIP 扩展已经开启,具体开启方法就不说了,不同的平台开启PHP扩增的方法网上都有,如有疑问欢迎交流。这里整理一下常用的示例供参考。
一、解压缩zip文件
               $zip = new ZipArchive;//新建一个ZipArchive的对象

/*通过ZipArchive的对象处理zip文件

$zip->open这个方法的参数表示处理的zip文件名。

如果对zip文件对象操作成功,$zip->open这个方法会返回TRUE

  1. */
  2. if ($zip->open(‘test.zip’) === TRUE)
  3. {
    1. $zip->extractTo(‘images’);//假设解压缩到在当前路径下images文件夹的子文件夹php
    2. $zip->close();//关闭处理的zip文件
  4. }
二、将文件压缩成zip文件
  1. $zip = new ZipArchive;
  2. /*
  3. $zip->open这个方法第一个参数表示处理的zip文件名。
  4. 第二个参数表示处理模式,ZipArchive::OVERWRITE表示如果zip文件存在,就覆盖掉原来的zip文件。
  5. 如果参数使用ZIPARCHIVE::CREATE,系统就会往原来的zip文件里添加内容。
  6. 如果不是为了多次添加内容到zip文件,建议使用ZipArchive::OVERWRITE。
  7. 使用这两个参数,如果zip文件不存在,系统都会自动新建。
  8. 如果对zip文件对象操作成功,$zip->open这个方法会返回TRUE
  9. */
  10. if ($zip->open(‘test.zip’, ZipArchive::OVERWRITE) === TRUE)
  11. {
    1. $zip->addFile(‘image.txt’);//假设加入的文件名是image.txt,在当前路径下
    2. $zip->close();
  12. }
三、文件追加内容添加到zip文件
  1. $zip = new ZipArchive;
  2. $res = $zip->open(‘test.zip’, ZipArchive::CREATE);
  3. if ($res === TRUE) {
    1. $zip->addFromString(‘test.txt’, ‘file content goes here’);
    2. $zip->close();
    3. echo ‘ok’;
  4. } else {
    1. echo ‘failed’;
  5. }
四、将文件夹打包成zip文件
  1. function addFileToZip($path, $zip) {
  2. $handler = opendir($path); //打开当前文件夹由$path指定。
  3. /*
  4. 循环的读取文件夹下的所有文件和文件夹
  5. 其中$filename = readdir($handler)是每次循环的时候将读取的文件名赋值给$filename,
  6. 为了不陷于死循环,所以还要让$filename !== false。
  7. 一定要用!==,因为如果某个文件名如果叫’0’,或者某些被系统认为是代表false,用!=就会停止循环
  8. */
  9. while (($filename = readdir($handler)) !== false) {
    1. if ($filename != “.” && $filename != “..”) {//文件夹文件名字为’.’和‘..’,不要对他们进行操作
      1. if (is_dir($path . “/” . $filename)) {// 如果读取的某个对象是文件夹,则递归
        1. addFileToZip($path . “/” . $filename, $zip);
      2. } else { //将文件加入zip对象
        1. $zip->addFile($path . “/” . $filename);
      3. }
      4. }
    2. }
    3. @closedir($path);
  10. }
  11. $zip = new ZipArchive();
  12. if ($zip->open(‘images.zip’, ZipArchive::OVERWRITE) === TRUE) {
    1. addFileToZip(‘images/’, $zip); //调用方法,对要打包的根目录进行操作,并将ZipArchive的对象传递给方法
    2. $zip->close(); //关闭处理的zip文件
  13. }
           ZipArchive方法如下:
  • ZipArchive :: addEmptyDir  – 添加一个新的目录
  • ZipArchive :: addFile  – 从给定的路径将文件添加到ZIP存档
  • ZipArchive :: addFromString  – 使用其内容将文件添加到ZIP存档
  • ZipArchive :: close – 关闭活动归档(已打开或新创建)
  • ZipArchive :: deleteIndex  – 使用其索引删除存档中的条目
  • ZipArchive :: deleteName  – 使用其名称删除存档中的条目
  • ZipArchive :: extractTo  – 提取归档内容
  • ZipArchive :: getArchiveComment  – 返回Zip归档注释
  • ZipArchive :: getCommentIndex  – 使用条目索引返回条目的注释
  • ZipArchive :: getCommentName  – 使用条目名称返回条目的注释
  • ZipArchive :: getFromIndex  – 使用其索引返回条目内容
  • ZipArchive :: getFromName  – 使用其名称返回条目内容
  • ZipArchive :: getNameIndex  – 使用其索引返回条目的名称
  • ZipArchive :: getStatusString  – 返回状态错误消息,系统和/或zip消息
  • ZipArchive :: getStream – 获取由其名称定义的条目的文件处理程序(只读)。
  • ZipArchive :: locateName – 返回归档中条目的索引
  • ZipArchive :: open – 打开ZIP文件存档
  • ZipArchive :: renameIndex  – 重命名由其索引定义的条目
  • ZipArchive :: renameName  – 重命名由其名称定义的条目
  • ZipArchive :: setArchiveComment  – 设置ZIP存档的注释
  • ZipArchive :: setCommentIndex  – 设置由其索引定义的条目的注释
  • ZipArchive :: setCommentName  – 设置由其名称定义的条目的注释
  • ZipArchive :: statIndex  – 获取由其索引定义的条目的详细信息。
  • ZipArchive :: statName  – 获取由其名称定义的条目的详细信息。
  • ZipArchive :: unchangeAll  – 撤消归档中完成的所有更改
  • ZipArchive :: unchangeArchive  – 还原归档中完成的所有全局更改。
  • ZipArchive :: unchangeIndex  – 将所做的所有更改还原到给定索引处的条目
  • ZipArchive :: unchangeName  – 将所做的所有更改还原到具有给定名称的条目。

转载请注明:程序路 » PHP ZipArchive实现压缩跟解压

喜欢 (0)