文档章节

php 压缩zip

 自信的水草
发布于 2016/12/13 16:44
字数 326
阅读 17
收藏 1

基本网上找的都是将子文件夹的文件递归出来放入根目录,但我需要保留文件夹本身的结构,终于找到一个自己需要的,修改了一些代码,让该方法可以排除或包含需要的文件

 

public function test(){
    $zip = new \ZipArchive();
    $path_zip = $_SERVER['DOCUMENT_ROOT'] . '/Application/Test/testzip/';
    $path_files = $_SERVER['DOCUMENT_ROOT'] . '/Application/Test/testPackage/';
    if( $zip->open( $path_zip . 'test.zip', \ZipArchive::OVERWRITE ) === true ){
        $this->createZip(opendir($path_files),$zip,$path_files, array( array( '1.txt' ), true ) );
        $zip->close();
    }
}

/*压缩多级目录
    $openFile:目录句柄
    $zipObj:Zip对象
    $sourceAbso:源文件夹路径
    $excludeOrInclude:包含或排除,第一个参数为数组,第二个参数代表方式,不填是包含,为true是排除
*/
private function createZip($openFile,$zipObj,$sourceAbso, $excludeOrInclude=array() , $newRelat = '')
{
    while(($file = readdir($openFile)) != false)
    {
        if($file=="." || $file=="..")
            continue;

        if( $excludeOrInclude ){
            if( isset( $excludeOrInclude[0] ) && is_array( $excludeOrInclude[0] ) && $excludeOrInclude[0] ){

                //第二的参数为true代表排除,否则代表包含,默认为包含
                if( isset( $excludeOrInclude[1] ) && $excludeOrInclude[1] == true ){
                    if( in_array( $file, $excludeOrInclude[0] ) ){
                        continue;
                    }
                }else{
                    if( ! in_array( $file, $excludeOrInclude[0] ) ){
                        continue;
                    }
                }
            }
        }

        /*源目录路径(绝对路径)*/
        $sourceTemp = $sourceAbso.'/'.$file;
        /*目标目录路径(相对路径)*/
        $newTemp = $newRelat==''?$file:$newRelat.'/'.$file;
        if(is_dir($sourceTemp))
        {
            //echo '创建'.$newTemp.'文件夹<br/>';
            $zipObj->addEmptyDir($newTemp);/*这里注意:php只需传递一个文件夹名称路径即可*/
            $this->createZip(opendir($sourceTemp),$zipObj,$sourceTemp,$newTemp);
        }
        if(is_file($sourceTemp))
        {
            //echo '创建'.$newTemp.'文件<br/>';
            $zipObj->addFile($sourceTemp,$newTemp);
        }
    }
}

© 著作权归作者所有

共有 人打赏支持
粉丝 1
博文 61
码字总数 10158
作品 0
南京
PHP自带ZIP压缩、解压缩类ZipArchiv介绍及使用

--------------------- 使用ZipArchive对象的前提 --------------------- 要使用该PHP扩展类,需要(PHP 5 >= 5.2.0, PECL zip >= 1.1.0),部分方法需要 PHP 5.2.+,且php.ini配置支持zip 对于......

lixiaokai2008
2013/10/31
0
0
PHP的ZIP压缩处理包 TbsZip 2.6 发布

TbsZip 是一个 PHP 的类用来读写 Zip 压缩文件包,该类无需 PHP 扩展或者是临时文件。TbsZip 可以对压缩文档中的文件进行读、写、修改和删除操作。详细使用方法请看这里。 PHP的ZIP压缩处理包...

老枪
2011/06/07
441
0
在线解压压缩--PclZip

PHP在线快速压缩解压ZIP文件 利用pclzip2.8.2类 做的,当pclzip有更新时可直接覆盖. 利用的时当前最新版类,很好用的哦, 支持在线解压zip文件,在线压缩zip文件 PclZip能够压缩与解压缩Zip格式的...

匿名
2012/08/19
1K
0
PHP压缩解压缩类:PclZip

PclZip是一个强大的压缩与解压缩zip文件的PHP类,PclZip library不仅能够压缩与解压缩Zip格式的文件;还能出压缩档的内容。同时也可以对现有的ZIP包进行添加或删除文件。 官方网站:http://...

Minho
2012/02/08
0
0
如何一键导出MySQL数据库

有时候,你的用户要求添加一个选项,导出整个数据库到一个SQL文件。虽然phpMyAdmin,以及Navicat有这个功能,但你的用户想要更简单点怎么办? 以下是如何一键导出MySQL数据库的php代码。 新建...

迷途d书童
2012/04/21
8.8K
15

没有更多内容

加载失败,请刷新页面

加载更多

下一页

idea新建springCloud项目(5)- 订单服务

1.创建订单api,如下: 2.创建订单实现逻辑 3.新建订单、订单商品表 -- 订单 create table `order_master` ( `order_id` varchar(32) not null, `buyer_name` varchar(32) not null comment......

monroeCode
12分钟前
0
0
游戏开发经验谈(二):对战类全球服游戏的设计与实现

上篇文章《游戏开发经验谈(一):游戏架构里隐藏的五个坑及其应对方案》,我们主要讲解了游戏架构设计当中隐藏的一些坑及其应对方案,错过的小伙伴可以回溯之前的内容。本期内容,将会重点介...

UCloudTech
22分钟前
0
0
Mysql基本语法

一.联合主键 drop table CONTENT_AND_CATALOG;CREATE TABLE `tobebetter`.`CONTENT_AND_CATALOG` ( `ID` VARCHAR(120) NOT NULL , `CONTENT_ID` VARCHAR(120) , `CA......

我是菜鸟我骄傲
23分钟前
0
0
179. centos7 安装mariadb

1. centos7 中安装mariadb 1.1 执行安装 centos7 自带了mariadb yum -y install mariadb mariadb-server 1.2 启动mariadb systemctl start mariadb 1.3 设置开机启动 systemctl enable maria......

Lucky_Me
31分钟前
0
0
【AI实战】动手训练自己的目标检测模型(YOLO篇)

在前面的文章中,已经介绍了基于SSD使用自己的数据训练目标检测模型(见文章:手把手教你训练自己的目标检测模型),本文将基于另一个目标检测模型YOLO,介绍如何使用自己的数据进行训练。 ...

雪饼
37分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部