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 相关文章推荐
实用函数9
Nov 08 PHP
PHP读取目录下所有文件的代码
Jan 07 PHP
php对gzip文件或者字符串解压实例参考
Jul 25 PHP
php中如何同时使用session和cookie来保存用户登录信息
Jul 05 PHP
PHP 关于访问控制的和运算符优先级介绍
Jul 08 PHP
php实现MD5加密16位(不要默认的32位)
Aug 12 PHP
ThinkPHP做文字水印时提示call an undefined function exif_imagetype()解决方法
Oct 30 PHP
php实现专业获取网站SEO信息类实例
Apr 02 PHP
详解WordPress开发中过滤属性以及Sql语句的函数使用
Dec 25 PHP
Symfony2函数用法实例分析
Mar 18 PHP
PHP实现的redis主从数据库状态检测功能示例
Jul 20 PHP
50个优秀经典PHP算法大集合 附源码
Aug 26 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/06/30 PHP
浅析php单例模式
2014/11/25 PHP
php实现MySQL数据库备份与还原类实例
2014/12/09 PHP
PHP开发之用微信远程遥控服务器
2018/01/25 PHP
Laravel5框架添加自定义辅助函数的方法
2018/08/01 PHP
PHP使用POP3读取邮箱接收邮件的示例代码
2020/07/08 PHP
checkbox 多选框 联动实现代码
2008/10/22 Javascript
下拉菜单点击实现连接跳转功能的js代码
2013/05/19 Javascript
用jquery仿做发微博功能示例
2014/04/18 Javascript
微信小程序的动画效果详解
2017/01/18 Javascript
node.js-v6新版安装具体步骤(分享)
2017/09/06 Javascript
浅谈angular.copy() 深拷贝
2017/09/14 Javascript
常用的9个JavaScript图表库详解
2017/12/19 Javascript
Vue SPA单页应用首屏优化实践
2018/06/28 Javascript
vue强制刷新组件的方法示例
2019/02/28 Javascript
详解bootstrap-fileinput文件上传控件的亲身实践
2019/03/21 Javascript
Electron + vue 打包桌面操作流程详解
2019/06/24 Javascript
js+css3实现炫酷时钟
2020/08/18 Javascript
python入门之语句(if语句、while语句、for语句)
2015/01/19 Python
Python绘制并保存指定大小图像的方法
2019/01/10 Python
Python不同目录间进行模块调用的实现方法
2019/01/29 Python
Python类的继承、多态及获取对象信息操作详解
2019/02/28 Python
Python批量删除只保留最近几天table的代码实例
2019/04/01 Python
使用Python制作一个打字训练小工具
2019/10/01 Python
如何完美的建立一个python项目
2020/10/09 Python
李维斯牛仔裤荷兰官方网站:Levi’s NL
2020/08/23 全球购物
市场营销个人求职信范文
2014/02/02 职场文书
求职个人评价范文
2014/04/09 职场文书
出租车拒载检讨书
2015/01/28 职场文书
中学教师师德师风承诺书
2015/04/28 职场文书
食品药品安全责任书
2015/05/11 职场文书
教师聘用意向书
2015/05/11 职场文书
办公室年度工作总结2015
2015/05/21 职场文书
Springboot如何使用logback实现多环境配置?
2021/06/16 Java/Android
MySQL千万级数据表的优化实战记录
2021/08/04 MySQL
Qt数据库应用之实现图片转pdf
2022/06/01 Java/Android