php ZipArchive压缩函数详解实例


Posted in PHP onNovember 06, 2013

用ZipArchive压缩文件,这个是php的扩展类,自php5.2版本以后就已经支持这个扩展,如果你在使用的时候出现错误,查看下php.ini里面的extension=php_zip.dll前面的分号有没有去掉,然后再重启Apache这样才能使用这个类库。
例1、生成zip 压缩文件

<?php 
/* 生成zip 压缩文件 */
function create_zip($files = array(),$destination = '',$overwrite = false) { 
    //if the zip file already exists and overwrite is false, return false 
    if(file_exists($destination) && !$overwrite) { return false; } 
    //vars 
    $valid_files = array(); 
    //if files were passed in... 
    if(is_array($files)) { 
        //cycle through each file 
        foreach($files as $file) { 
            //make sure the file exists 
            if(file_exists($file)) { 
                $valid_files[] = $file; 
            } 
        } 
    } 
    //if we have good files... 
    if(count($valid_files)) { 
        //create the archive 
        $zip = new ZipArchive(); 
        if($zip->open($destination,$overwrite ? ZIPARCHIVE::OVERWRITE : ZIPARCHIVE::CREATE) !== true) { 
            return false; 
        } 
        //add the files 
        foreach($valid_files as $file) { 
            $file_info_arr= pathinfo($file); 
            $zip->addFile($file,$file_info_arr['basename']);//去掉层级目录 
        } 
        //debug 
        //echo 'The zip archive contains ',$zip->numFiles,' files with a status of ',$zip->status;         //close the zip -- done! 
        $zip->close(); 
        //check to make sure the file exists 
        return file_exists($destination); 
    } 
    else
    { 
        return false; 
    } 
} 
define('ROOTPATH',dirname ( __FILE__ )); //网站路径 
$files_to_zip = array( 
    ROOTPATH.DIRECTORY_SEPARATOR.'PHP+jQuery+Cookbook.pdf', 
    ROOTPATH.DIRECTORY_SEPARATOR.'TurboListerZeroTemplate.csv'
); 
//if true, good; if false, zip creation failed 
$filename='my-archive.zip'; 
$result = create_zip($files_to_zip,$filename);
 

例2 、压缩文件夹下面的所有文
<?php 
/* 
php zip压缩文件夹下面的所有文件 
*/
class HZip 
{ 
  /** 
   * 添加文件和子目录的文件到zip文件 
   * @param string $folder 
   * @param ZipArchive $zipFile 
   * @param int $exclusiveLength Number of text to be exclusived from the file path. 
   */
  private static function folderToZip($folder, &$zipFile, $exclusiveLength) { 
    $handle = opendir($folder); 
    while (false !== $f = readdir($handle)) { 
      if ($f != '.' && $f != '..') { 
        $filePath = "$folder/$f"; 
        // Remove prefix from file path before add to zip. 
        $localPath = substr($filePath, $exclusiveLength); 
        if (is_file($filePath)) { 
          $zipFile->addFile($filePath, $localPath); 
        } elseif (is_dir($filePath)) { 
          // 添加子文件夹 
          $zipFile->addEmptyDir($localPath); 
          self::folderToZip($filePath, $zipFile, $exclusiveLength); 
        } 
      } 
    } 
    closedir($handle); 
  }   /** 
   * Zip a folder (include itself). 
   * Usage: 
   *   HZip::zipDir('/path/to/sourceDir', '/path/to/out.zip'); 
   * 
   * @param string $sourcePath Path of directory to be zip. 
   * @param string $outZipPath Path of output zip file. 
   */
  public static function zipDir($sourcePath, $outZipPath) 
  { 
    $pathInfo = pathInfo($sourcePath); 
    $parentPath = $pathInfo['dirname']; 
    $dirName = $pathInfo['basename']; 
    $sourcePath=$parentPath.'/'.$dirName;//防止传递'folder' 文件夹产生bug 
    $z = new ZipArchive(); 
    $z->open($outZipPath, ZIPARCHIVE::CREATE);//建立zip文件 
    $z->addEmptyDir($dirName);//建立文件夹 
    self::folderToZip($sourcePath, $z, strlen("$parentPath/")); 
    $z->close(); 
  } 
} 
//使用方法 
HZip::zipDir('yourlife', 'yourlife.zip'); 
?>
 

1.ZipArchive::addEmptyDir
添加一个新的文件目录
2.ZipArchive::addFile
将文件添加到指定zip压缩包中。
3.ZipArchive::addFromString
添加的文件同时将内容添加进去
4.ZipArchive::close
关闭ziparchive
5.ZipArchive::extractTo
将压缩包解压
6.ZipArchive::open
打开一个zip压缩包
7.ZipArchive::getStatusString
返回压缩时的状态内容,包括错误信息,压缩信息等等
8.ZipArchive::deleteIndex
删除压缩包中的某一个文件,如:deleteIndex(0)删除第一个文件
9.ZipArchive::deleteName
删除压缩包中的某一个文件名称,同时也将文件删除。

PHP 相关文章推荐
php实现从ftp服务器上下载文件树到本地电脑的程序
Feb 10 PHP
php中删除、清空session的方式总结
Oct 09 PHP
php实现购物车功能(下)
Jan 05 PHP
PHP发送AT指令实例代码
May 26 PHP
PHP 将数组打乱 shuffle函数的用法及简单实例
Jun 17 PHP
PHP用FTP类上传文件视频等的简单实现方法
Sep 23 PHP
老生常谈PHP面向对象之解释器模式
May 17 PHP
PHP设计模式之状态模式定义与用法详解
Apr 02 PHP
实现PHP中session存储及删除变量
Oct 15 PHP
YII框架常用技巧总结
Apr 27 PHP
在phpstudy集成环境下的nginx服务器下配置url重写
Dec 02 PHP
关于PHP数组迭代器的使用方法实例
Nov 17 PHP
php根据分类合并数组的方法实例详解
Nov 06 #PHP
php foreach循环中使用引用的问题
Nov 06 #PHP
php用正则表达式匹配中文实例详解
Nov 06 #PHP
php引用传值实例详解学习
Nov 06 #PHP
php二维数组排序详解
Nov 06 #PHP
PHP Curl多线程原理实例详解
Nov 06 #PHP
php二维数组用键名分组相加实例函数
Nov 06 #PHP
You might like
PHP 观察者模式的实现代码
2013/05/10 PHP
JavaScript CSS菜单功能 改进版
2008/12/20 Javascript
javascript检查浏览器是否支持flash的实现代码
2014/08/14 Javascript
AngularJS入门教程之学习环境搭建
2014/12/06 Javascript
jQuery插件实现文字无缝向上滚动效果代码
2016/02/25 Javascript
jQuery解决$符号命名冲突
2016/06/18 Javascript
js实现网页的两个input标签内的数值加减(示例代码)
2017/08/15 Javascript
详解vue2 $watch要注意的问题
2017/09/08 Javascript
jQuery EasyUI开发技巧总结
2017/09/26 jQuery
js最简单的双向绑定实例讲解
2018/01/02 Javascript
jsonp跨域及实现百度首页联想功能的方法
2018/08/30 Javascript
vue+echarts实现中国地图流动效果(步骤详解)
2021/01/27 Vue.js
js动态添加带圆圈序号列表的实例代码
2021/02/18 Javascript
pyv8学习python和javascript变量进行交互
2013/12/04 Python
Python协程的用法和例子详解
2017/09/09 Python
对python中的乘法dot和对应分量相乘multiply详解
2018/11/14 Python
对python实现合并两个排序链表的方法详解
2019/01/23 Python
python 发送get请求接口详解
2020/11/17 Python
python爬虫分布式获取数据的实例方法
2020/11/26 Python
Superdry极度乾燥官网:日本街头风格,纯英国制造品牌
2016/10/31 全球购物
Desigual德国官网:在线购买原创服装
2018/03/27 全球购物
德国领先的大尺码和超大尺码男装在线零售商:Bigtex
2019/06/22 全球购物
武汉英思工程科技有限公司&ndash;ORACLE面试测试题目
2012/04/30 面试题
如何写一个自定义标签
2012/12/28 面试题
一岗双责责任书
2014/04/15 职场文书
机电专业求职信
2014/06/14 职场文书
2014年园林绿化工作总结
2014/12/11 职场文书
导游词欢迎词
2015/02/02 职场文书
2015年光棍节活动总结
2015/03/24 职场文书
2015年小学生国庆节演讲稿
2015/07/30 职场文书
办公室规章制度范本
2015/08/04 职场文书
幼儿园小班教学反思
2016/03/03 职场文书
Windows11里微软已经将驱动程序安装位置A盘删除
2021/11/21 数码科技
canvas实现贪食蛇的实践
2022/02/15 Javascript
Android Flutter实现图片滑动切换效果
2022/04/07 Java/Android
create-react-app开发常用配置教程
2022/06/25 Javascript