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代码包装修正版
Mar 15 PHP
用PHP书写安全的脚本代码
Feb 05 PHP
CI框架中zip类应用示例
Jun 17 PHP
php将12小时制转换成24小时制的方法
Mar 31 PHP
php使用Jpgraph绘制饼状图的方法
Jun 10 PHP
PHP常用工具类大全附全部代码下载
Dec 07 PHP
学习php设计模式 php实现工厂模式(factory)
Dec 07 PHP
Yii2 rbac权限控制之rule教程详解
Jun 23 PHP
php字符串操作针对负值的判断分析
Jul 28 PHP
thinkPHP5.0框架命名空间详解
Mar 18 PHP
php封装的mongodb操作类代码
Aug 06 PHP
PHP实现唤起微信支付功能
Feb 18 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中使用匿名函数操作数据库的例子
2014/11/17 PHP
php列出mysql表所有行和列的方法
2015/03/13 PHP
适合PHP初学者阅读的4本经典书籍
2016/09/23 PHP
jQuery 页面载入进度条实现代码
2009/02/08 Javascript
js 学习笔记(三)
2009/12/29 Javascript
跨域请求之jQuery的ajax jsonp的使用解惑
2011/10/09 Javascript
Package.js  现代化的JavaScript项目make工具
2012/05/23 Javascript
jQuery实现动画效果的实例代码
2013/05/07 Javascript
node.js中的fs.readlinkSync方法使用说明
2014/12/17 Javascript
jQuery.datatables.js插件用法及api实例详解
2016/10/28 Javascript
Javascript中 toFixed四舍六入方法
2017/08/21 Javascript
关于vue单文件中引用路径的处理方法
2018/01/08 Javascript
关于Vue的路由权限管理的示例代码
2018/03/06 Javascript
JavaScript实现区块链
2018/03/14 Javascript
微信小程序实现之手势锁功能实例代码
2018/07/19 Javascript
jquery.tagsinput.js实现记录checkbox勾选的顺序
2019/09/21 jQuery
使用Vue-cli 中为单独页面设置背景图片铺满全屏
2020/07/17 Javascript
[01:58]DOTA2上海特级锦标赛现场采访:RTZ这个ID到底好不好
2016/03/25 DOTA
用pycharm开发django项目示例代码
2018/10/24 Python
python爬虫中多线程的使用详解
2019/09/23 Python
python实现简单图书管理系统
2019/11/22 Python
Python使用Tkinter实现转盘抽奖器的步骤详解
2020/01/06 Python
使用CSS实现阅读进度条
2017/02/27 HTML / CSS
俄罗斯珠宝市场的领导者之一:Бронницкий ювелир
2019/10/02 全球购物
Feelunique中文官网:欧洲最大化妆品零售电商
2020/07/10 全球购物
怎样声明接口
2014/09/19 面试题
高中学生评语大全
2014/04/25 职场文书
工厂门卫的岗位职责
2014/07/27 职场文书
2014年个人工作总结模板
2014/12/15 职场文书
个人德育工作总结
2015/03/05 职场文书
民事辩护词范文
2015/05/21 职场文书
2015入党个人自传范文
2015/06/26 职场文书
2015选调生工作总结
2015/07/24 职场文书
2016关于预防职务犯罪的心得体会
2016/01/21 职场文书
Vue的列表之渲染,排序,过滤详解
2022/02/24 Vue.js
MySQL创建管理子分区
2022/04/13 MySQL