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+Ajax实现表单验证的详解
Jun 25 PHP
解析在PHP中使用mysqli扩展库对mysql的操作
Jul 03 PHP
PHP采用get获取url汉字出现乱码的解决方法
Nov 13 PHP
php执行多个存储过程的方法【基于thinkPHP】
Nov 08 PHP
Fleaphp常见函数功能与用法示例
Nov 15 PHP
laravel5.2实现区分前后台用户登录的方法
Jan 11 PHP
ThinkPHP3.2框架使用addAll()批量插入数据的方法
Mar 16 PHP
thinkPHP5.0框架环境变量配置方法
Mar 17 PHP
PHP实现二叉树深度优先遍历(前序、中序、后序)和广度优先遍历(层次)实例详解
Apr 20 PHP
PHP生成短网址的思路以及实现方法的详解
Mar 25 PHP
在 Laravel 中动态隐藏 API 字段的方法
Oct 25 PHP
PHP 枚举类型的管理与设计知识点总结
Feb 13 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配置心得包含MYSQL5乱码解决
2006/11/20 PHP
Smarty模板引擎缓存机制详解
2016/05/23 PHP
PHP实现将几张照片拼接到一起的合成图片功能【便于整体打印输出】
2017/11/14 PHP
PHP设计模式之抽象工厂模式实例分析
2019/03/25 PHP
javascript 多种搜索引擎集成的页面实现代码
2010/01/02 Javascript
javascript hashtable 修正版 下载
2010/12/30 Javascript
javascript中函数作为参数调用的方法
2015/02/09 Javascript
jquery zTree异步加载、模糊搜索简单实例分享
2016/03/24 Javascript
jQuery实现分页功能(含ajax请求、后台数据、附完整demo)
2017/04/03 jQuery
使用D3.js制作图表详解
2017/08/13 Javascript
微信小程序实现给嵌套template模板传递数据的方式总结
2017/12/18 Javascript
Vue2.0实现简单分页及跳转效果
2019/07/29 Javascript
vue实现多级菜单效果
2019/10/19 Javascript
vue项目强制清除页面缓存的例子
2019/11/06 Javascript
vue+Element中table表格实现可编辑(select下拉框)
2020/05/21 Javascript
手写Vue2.0 数据劫持的示例
2021/03/04 Vue.js
深入Python函数编程的一些特性
2015/04/13 Python
python中 chr unichr ord函数的实例详解
2017/08/06 Python
vscode 远程调试python的方法
2017/12/01 Python
PyQT实现多窗口切换
2018/04/20 Python
在Python中将函数作为另一个函数的参数传入并调用的方法
2019/01/22 Python
Python生成一个迭代器的实操方法
2019/06/18 Python
Tensorflow实现神经网络拟合线性回归
2019/07/19 Python
对Django 转发和重定向的实例详解
2019/08/06 Python
Python在OpenCV里实现极坐标变换功能
2019/09/02 Python
window环境pip切换国内源(pip安装异常缓慢的问题)
2019/12/31 Python
python如何实现单链表的反转
2020/02/10 Python
HTML5 声明兼容IE的写法
2011/05/16 HTML / CSS
Mistine官方海外旗舰店:泰国国民彩妆品牌
2016/12/28 全球购物
台湾流行服饰购物平台:OB严选
2018/01/21 全球购物
Java 中访问数据库的步骤?Statement 和PreparedStatement 之间的区别?
2012/06/05 面试题
高三毕业典礼演讲稿
2014/05/13 职场文书
2014年自愿离婚协议书范本
2014/09/25 职场文书
捐书活动倡议书
2015/04/27 职场文书
关爱空巢老人感想
2015/08/11 职场文书
高并发下Redis如何保持数据一致性(避免读后写)
2022/03/18 Redis