zoukankan      html  css  js  c++  java
  • php创建含文件夹的zip文件

        这两天工作需要,要将不同日期上传的图片打包成zip下载,网上找了好多列子,都不能生成含目录结构的zip包,经过认真研究,终于搞定了。网上所谓的将文件夹压缩成zip文件,仅仅是将文件夹中所有文件提取进行打包,无法生成含目录结构的zip文件,好了不说了,上代码:

    1、首先php要支持zip

    配置:extension=php_zip.dll,不再过多叙述,

    2、压缩文件:开始和网上多数例子相同,但注意核心是$zip->addFile()的使用,第二个参数是放在压缩包中的文件名称,所以这里直接将文件的相对路径作为文件的包内名称,然后就惊喜的发现zip包内文件夹出现了

    $fileName = $tmpPath.$fileName;
    if(!file_exists($fileName)){
    //重新生成文件
    $zip = new ZipArchive();//使用本类,linux需开启zlib,windows需取消php_zip.dll前的注释
    if ($zip->open($fileName, ZIPARCHIVE::CREATE)!==TRUE) {
    exit('无法打开文件,或者文件创建失败');
    }
    $datalist=list_dir($tmpPath);
    foreach($datalist as $val){
    if(file_exists($val)){

    $zip->addFile($val, str_replace($tmpPath, '', $val));

    }
    }
    $zip->close();//关闭
    }


    //获取文件列表
    function list_dir($dir){
    $result = array();
    if (is_dir($dir)){
    $file_dir = scandir($dir);
    foreach($file_dir as $file){
    if ($file == '.' || $file == '..'){
    continue;
    }
    elseif (is_dir($dir.$file)){
    $result = array_merge($result, list_dir($dir.$file.'/'));
    }
    else{
    array_push($result, $dir.$file);
    }
    }
    }
    return $result;
    }

    以上,希望对遇到同样问题的同学能有所帮助

  • 相关阅读:
    .Net控件创建热键
    .Net字符串处理
    C++ 中通过函数名字的字符串调用函数
    将.Net应用程序依赖的库文件部署到其他目录下
    VS2012生成事件
    visual studio导出项目模板
    .Net Program Unable to copy a file from objDebug to binDebug
    VBA引用.Net类库
    .Net 自定义事件
    VB.Net 解决winForm界面卡死
  • 原文地址:https://www.cnblogs.com/YearsOfDrunk/p/9581497.html
Copyright © 2011-2022 走看看