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 相关文章推荐
初学者入门:细述PHP4的核心Zend
Sep 05 PHP
PHP设计模式之调解者模式的深入解析
Jun 13 PHP
解析PHP中intval()等int转换时的意外异常情况
Jun 21 PHP
PHP 验证码不显示只有一个小红叉的解决方法
Sep 30 PHP
php header功能的使用
Oct 28 PHP
php随机显示图片的简单示例
Feb 15 PHP
phpnow php探针环境检测代码
Nov 04 PHP
php数字每三位加逗号的功能函数
Oct 22 PHP
php调用自己java程序的方法详解
May 13 PHP
php+MySql实现登录系统与输出浏览者信息功能
Jul 01 PHP
Thinkphp 在api开发中异常返回依然是html的解决方式
Oct 16 PHP
Laravel 微信小程序后端搭建步骤详解
Nov 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
ionCube 一款类似zend的PHP加密/解密工具
2010/07/25 PHP
PHP运行时强制显示出错信息的代码
2011/04/20 PHP
PHP读取txt文件的内容并赋值给数组的代码
2011/11/03 PHP
php中ob函数缓冲机制深入理解
2015/08/03 PHP
php+mysql实现无限级分类
2015/11/11 PHP
详解WordPress中创建和添加过滤器的相关PHP函数
2015/12/29 PHP
PHP登录验证码的实现与使用方法
2016/07/07 PHP
php实现替换手机号中间数字为*号及隐藏IP最后几位的方法
2016/11/16 PHP
PHP基于timestamp和nonce实现的防止重放攻击方案分析
2019/07/26 PHP
js树形控件脚本代码
2008/07/24 Javascript
JavaScript实现表格排序方法
2013/06/14 Javascript
JS预览图像将本地图片显示到浏览器上
2013/08/25 Javascript
页面实时更新时间的JS实例代码
2013/12/18 Javascript
Javascript学习笔记之数组的遍历和 length 属性
2014/11/23 Javascript
JS实现鼠标箭头变成一个燃烧烛光效果的方法
2015/02/28 Javascript
JavaScript实现的简单烟花特效代码
2015/10/20 Javascript
Vue 开发音乐播放器之歌手页右侧快速入口功能
2018/08/08 Javascript
基于JS实现table导出Excel并保留样式
2020/05/19 Javascript
Java 生成随机字符的示例代码
2021/01/13 Javascript
python实现代码行数统计示例分享
2014/02/10 Python
Python随机生成信用卡卡号的实现方法
2015/05/14 Python
python爬取亚马逊书籍信息代码分享
2017/12/09 Python
Python 3.7新功能之dataclass装饰器详解
2018/04/21 Python
解决Matplotlib图表不能在Pycharm中显示的问题
2018/05/24 Python
Python环境下安装PyGame和PyOpenGL的方法
2020/03/25 Python
Python-opencv实现红绿两色识别操作
2020/06/04 Python
CSS 说明横向进度条最后显示文字的实现代码
2020/11/10 HTML / CSS
日本非常有名的内衣丝袜品牌:GUNZE
2017/01/06 全球购物
HQhair美国/加拿大:英国化妆品、美容及美发产品商城
2019/04/15 全球购物
求职简历自荐信
2013/10/20 职场文书
物理系毕业生自荐信
2013/11/01 职场文书
幼儿园新年寄语
2014/04/03 职场文书
买卖车协议书
2014/04/21 职场文书
十八大宣传标语
2014/10/09 职场文书
2015年监理工作总结范文
2015/04/07 职场文书
爱国之歌(8首)
2019/09/29 职场文书