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 相关文章推荐
提问的智慧
Oct 09 PHP
使用session判断用户登录用户权限(超简单)
Jun 08 PHP
zend framework文件上传功能实例代码
Dec 25 PHP
php中文验证码实现示例分享
Jan 12 PHP
PHP_NETWORK_GETADDRESSES: GETADDRINFO FAILED问题解决办法
May 04 PHP
PHP对象递归引用造成内存泄漏分析
Aug 28 PHP
php防止用户重复提交表单
Nov 02 PHP
php图片上传类 附调用方法
May 15 PHP
PHP使用new StdClass()创建空对象的方法分析
Jun 06 PHP
PHP中使用jQuery+Ajax实现分页查询多功能操作(示例讲解)
Sep 17 PHP
PHP中“=&gt;
Mar 01 PHP
php设计模式之组合模式实例详解【星际争霸游戏案例】
Mar 27 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
世界上第一台立体声收音机
2021/03/01 无线电
php伪静态之APACHE篇
2014/06/02 PHP
php实现四舍五入的方法小结
2015/03/03 PHP
Yii2下点击验证码的切换实例代码
2017/03/14 PHP
微信第三方登录(原生)demo【必看篇】
2017/05/26 PHP
escape、encodeURI 和 encodeURIComponent 的区别
2009/03/02 Javascript
javascript 短路法代码精简
2009/08/20 Javascript
JavaScript 判断判断某个对象是Object还是一个Array
2010/01/28 Javascript
JavaScript中创建对象和继承示例解读
2014/02/12 Javascript
实例详解jQuery Mockjax 插件模拟 Ajax 请求
2016/01/12 Javascript
javascript基于原型链的继承及call和apply函数用法分析
2016/12/15 Javascript
jQuery实现手机上输入后隐藏键盘功能
2017/01/04 Javascript
js cookie实现记住密码功能
2017/01/17 Javascript
Ionic项目中Native Camera的使用方法
2017/06/07 Javascript
javascript数组去重方法总结(推荐)
2019/03/20 Javascript
nodejs实现UDP组播示例方法
2019/11/04 NodeJs
Python过滤函数filter()使用自定义函数过滤序列实例
2014/08/26 Python
python自动化测试实例解析
2014/09/28 Python
Python设计模式中单例模式的实现及在Tornado中的应用
2016/03/02 Python
再谈Python中的字符串与字符编码(推荐)
2016/12/14 Python
Python面向对象之类和对象属性的增删改查操作示例
2018/12/14 Python
django框架自定义模板标签(template tag)操作示例
2019/06/24 Python
python 动态调用函数实例解析
2019/10/21 Python
python如何从键盘获取输入实例
2020/06/18 Python
墨西哥运动服饰和鞋网上商店:Netshoes墨西哥
2016/07/28 全球购物
办公室前台岗位职责
2014/01/04 职场文书
小学教师评语大全
2014/04/23 职场文书
校园活动策划方案
2014/06/13 职场文书
给客户的感谢信
2015/01/21 职场文书
先进教师个人总结
2015/02/11 职场文书
新课程改革心得体会
2016/01/22 职场文书
看古人们是如何赞美老师的?
2019/07/08 职场文书
JavaScript实现复选框全选功能
2021/04/11 Javascript
MySQL InnoDB ReplicaSet(副本集)简单介绍
2021/04/24 MySQL
CSS 伪元素::marker详解
2021/06/26 HTML / CSS
利用Python多线程实现图片下载器
2022/03/25 Python