文档章节

php 压缩zip

 自信的水草
发布于 2016/12/13 16:44
字数 326
阅读 19
收藏 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);
        }
    }
}

© 著作权归作者所有

共有 人打赏支持
粉丝 0
博文 68
码字总数 10572
作品 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
在线解压压缩--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
PHP扩展类ZipArchive实现压缩解压Zip文件和文件打包下载

PHP ZipArchive 是PHP自带的扩展类,可以轻松实现ZIP文件的压缩和解压,使用前首先要确保PHP ZIP 扩展已经开启,具体开启方法就不说了,不同的平台开启PHP扩增的方法网上都有,如有疑问欢迎交...

Junn
2013/01/24
0
1
使用PHP处理zip压缩文件之ZipArchive

PHP5.2以后,强化了对压缩文件的处理,不仅对zip算法,还包括rar算法、gzip算法等都有了相应的支持。 今天,我来和大家分享一下用PHP处理zip文件。我们用到的是ZipArchive类,如果你安装了P...

crazymus
2014/11/16
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Golang中Int32转换为int16丢失精度的具体过程

1.类型转换代码 Int32转换为int16会丢失精度,这是总所周知的,但是具体如何丢失精度的,请看下面的代码: var tmp1 int32 = 123424021var tmp2 int16var tmp3 uint16tmp2 = int16(tmp1)...

cloes
32分钟前
3
0
原生Servlet文件上传和下载Servlet多个文件上传

转载:原文连接https://blog.csdn.net/HaHa_Sir/article/details/81744629一、前端 html 代码<center> <h2> 基于servelt 3.0注解实现文件上传 </h2> <h3>1、单个文件上传</h......

小橙子的曼曼
36分钟前
3
0
JDBC流程

简述

细节探索者
43分钟前
3
0
利用位运算实现加减乘除

利用位运算实现加减乘除 受《剑指offer》上题目的启发,现在把利用位运算做加、减、乘、除的方法总结一下。 参考网址:https://blog.csdn.net/sinat_35261315/article/details/72904945 基础...

薛定谔的旺
48分钟前
6
0
mysql——通过命令将sql查询的结果导出到具体文件

mysql——通过命令将sql查询的结果导出到具体文件 2018年07月29日 21:53:51 郑浩- 阅读数:2949 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013045437/a...

linjin200
52分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部