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 5.0对象模型深度探索之类的静态成员
Mar 27 PHP
纯php打造的tab选项卡效果代码(不用js)
Dec 29 PHP
ThinkPHP关联模型操作实例分析
Sep 23 PHP
使用php伪造referer的方法 利用referer防止图片盗链
Jan 20 PHP
PHP跨平台获取服务器IP地址自定义函数分享
Dec 29 PHP
php转换颜色为其反色的方法
Apr 27 PHP
php通过获取头信息判断图片类型的方法
Jun 26 PHP
php判断邮箱地址是否存在的方法
Feb 13 PHP
PHP 5.6.11中CURL模块问题的解决方法
Aug 08 PHP
Zend Framework基于Command命令行建立ZF项目的方法
Feb 18 PHP
php面向对象基础详解【星际争霸游戏案例】
Jan 23 PHP
php开发最强大的IDE编辑的phpstorm 2020.2配置Xdebug调试的详细教程
Aug 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基于dom实现的图书xml格式数据示例
2017/02/03 PHP
PDO::beginTransaction讲解
2019/01/27 PHP
javascript 异步页面查询实现代码(asp.net)
2010/05/26 Javascript
分享20多个很棒的jQuery 文件上传插件或教程
2011/09/04 Javascript
本地图片预览(支持IE6/IE7/IE8/Firefox3)经验总结
2013/03/25 Javascript
jQuery实现单击弹出Div层窗口效果(可关闭可拖动)
2015/09/19 Javascript
实例讲解避免javascript冲突的方法
2016/01/03 Javascript
JavaScript表单验证开发
2016/11/23 Javascript
js生成随机数方法和实例
2017/01/17 Javascript
EasyUI创建人员树的实例代码
2017/09/15 Javascript
实现单层json按照key字母顺序排序的示例
2017/12/06 Javascript
vue 2.0 购物车小球抛物线的示例代码
2018/02/01 Javascript
微信小程序模拟cookie的实现
2018/06/20 Javascript
新手必须知的Node.js 4个JavaScript基本概念
2018/09/16 Javascript
深入理解vue-class-component源码阅读
2019/02/18 Javascript
JS回调函数 callback的理解与使用案例分析
2019/09/09 Javascript
在Echarts图中给坐标轴加一个标识线markLine
2020/07/20 Javascript
JavaScript实现alert弹框效果
2020/11/19 Javascript
[01:22:42]2014 DOTA2华西杯精英邀请赛 5 24 DK VS LGD
2014/05/26 DOTA
python中函数总结之装饰器闭包详解
2016/06/12 Python
Django日志模块logging的配置详解
2017/02/14 Python
Ubuntu18.04下python版本完美切换的解决方法
2019/06/14 Python
Python 使用matplotlib模块模拟掷骰子
2019/08/08 Python
Python astype(np.float)函数使用方法解析
2020/06/08 Python
如何将json数据转换为python数据
2020/09/04 Python
python list的index()和find()的实现
2020/11/16 Python
利用CSS3的transform做的动态时钟效果
2011/09/21 HTML / CSS
用CSS3和table标签实现一个圆形轨迹的动画的示例代码
2019/01/17 HTML / CSS
如何用JQuery进行表单验证
2013/05/29 面试题
Servlet都有哪些方法?主要作用是什么?
2014/03/04 面试题
应届生高等护理求职信
2013/10/12 职场文书
热能动力工程毕业生自荐信
2013/11/07 职场文书
2015年秋季小学开学标语
2015/07/16 职场文书
大学学生会竞选稿
2015/11/19 职场文书
JS异步堆栈追踪之为什么await胜过Promise
2021/04/28 Javascript
mysql sock文件存储了什么信息
2022/07/15 MySQL