如何将文件夹打包成zip?

时间:2022-02-18 09:34:25
如何将文件夹打包成zip?


function addFileToZip($path,$zip){
    $handler=opendir($path);
    while(($filename=readdir($handler))!==false){
        if($filename != "." && $filename != ".."){
            if(is_dir($path."/".$filename)){
                addFileToZip($path."/".$filename, $zip);
            }else {
                $zip->addFile($path."/".$filename);
            }
        }
    }
    @closedir($path);
}


$zip=new ZipArchive();
if($zip->open('share.zip', ZipArchive::OVERWRITE)=== TRUE){
    addFileToZip('ex/share/', $zip);
    $zip->close();
}

12 个解决方案

#1


$zip = new ZipArchive();
if($zip->open('share.zip', ZipArchive::OVERWRITE)=== TRUE){
  $p = glob($path');
  for($i=0; $i<count($p); $i++) {
    if(is_dir($p[$i])) $p = array_merge($p, glob("{$p[$i]}/*"));
    else $zip->addFile($p[$i]);
  }
  $zip->close();
}

#2


楼上那个是一般默认情况都支持的吗,还是要网站服务器的PHP单独开了压缩功能呢

#3


引用 1 楼 xuzuning 的回复:
$zip = new ZipArchive();
if($zip->open('share.zip', ZipArchive::OVERWRITE)=== TRUE){
  $p = glob($path');
  for($i=0; $i<count($p); $i++) {
    if(is_dir($p[$i])) $p = array_merge($p, glob("{$p[$i]}/*"));
    else $zip->addFile($p[$i]);
  }
  $zip->close();
}


运行test.php 后没有生成zip压缩包

如何将文件夹打包成zip?

#4


你组装的路径存在吗?

#5


引用 4 楼 xuzuning 的回复:
你组装的路径存在吗?


echo file_exists(__FILE__."/../A");

输出 1

需要打开什么php拓展吗 ?

#6


参考第 6 行的写法

#7


引用 6 楼 xuzuning 的回复:
参考第 6 行的写法


第6行?


引用 1 楼 xuzuning 的回复:
$zip = new ZipArchive();
if($zip->open('share.zip', ZipArchive::OVERWRITE)=== TRUE){
  $p = glob($path');
  for($i=0; $i<count($p); $i++) {
    if(is_dir($p[$i])) $p = array_merge($p, glob("{$p[$i]}/*"));
    else $zip->addFile($p[$i]);
  }
  $zip->close();
}


 if(is_dir($p[$i])) $p = array_merge($p, glob("{$p[$i]}/*"));
如果路径是目录,不用递归?

#8


$p = glob("$path/*");

#9


引用 8 楼 xuzuning 的回复:
$p = glob("$path/*");

$p 返回空的数组
test.php

$zip = new ZipArchive();
if($zip->open('share.zip', ZipArchive::OVERWRITE)=== TRUE){
    $path = __FILE__."/../A";
    //$p = glob($path);
    $p = glob("$path/*");
    for($i=0; $i<count($p); $i++) {
    if(is_dir($p[$i])) $p = array_merge($p, glob("{$p[$i]}/*"));
    else $zip->addFile($p[$i]);
  }
  $zip->close();
}

文件结构
如何将文件夹打包成zip?

想要的效果:将A文件打包成zip

#10


空数组就表示你的路径不对

#11


路劲貌似不对!!!

#12


如何将文件夹打包成zip?

#1


$zip = new ZipArchive();
if($zip->open('share.zip', ZipArchive::OVERWRITE)=== TRUE){
  $p = glob($path');
  for($i=0; $i<count($p); $i++) {
    if(is_dir($p[$i])) $p = array_merge($p, glob("{$p[$i]}/*"));
    else $zip->addFile($p[$i]);
  }
  $zip->close();
}

#2


楼上那个是一般默认情况都支持的吗,还是要网站服务器的PHP单独开了压缩功能呢

#3


引用 1 楼 xuzuning 的回复:
$zip = new ZipArchive();
if($zip->open('share.zip', ZipArchive::OVERWRITE)=== TRUE){
  $p = glob($path');
  for($i=0; $i<count($p); $i++) {
    if(is_dir($p[$i])) $p = array_merge($p, glob("{$p[$i]}/*"));
    else $zip->addFile($p[$i]);
  }
  $zip->close();
}


运行test.php 后没有生成zip压缩包

如何将文件夹打包成zip?

#4


你组装的路径存在吗?

#5


引用 4 楼 xuzuning 的回复:
你组装的路径存在吗?


echo file_exists(__FILE__."/../A");

输出 1

需要打开什么php拓展吗 ?

#6


参考第 6 行的写法

#7


引用 6 楼 xuzuning 的回复:
参考第 6 行的写法


第6行?


引用 1 楼 xuzuning 的回复:
$zip = new ZipArchive();
if($zip->open('share.zip', ZipArchive::OVERWRITE)=== TRUE){
  $p = glob($path');
  for($i=0; $i<count($p); $i++) {
    if(is_dir($p[$i])) $p = array_merge($p, glob("{$p[$i]}/*"));
    else $zip->addFile($p[$i]);
  }
  $zip->close();
}


 if(is_dir($p[$i])) $p = array_merge($p, glob("{$p[$i]}/*"));
如果路径是目录,不用递归?

#8


$p = glob("$path/*");

#9


引用 8 楼 xuzuning 的回复:
$p = glob("$path/*");

$p 返回空的数组
test.php

$zip = new ZipArchive();
if($zip->open('share.zip', ZipArchive::OVERWRITE)=== TRUE){
    $path = __FILE__."/../A";
    //$p = glob($path);
    $p = glob("$path/*");
    for($i=0; $i<count($p); $i++) {
    if(is_dir($p[$i])) $p = array_merge($p, glob("{$p[$i]}/*"));
    else $zip->addFile($p[$i]);
  }
  $zip->close();
}

文件结构
如何将文件夹打包成zip?

想要的效果:将A文件打包成zip

#10


空数组就表示你的路径不对

#11


路劲貌似不对!!!

#12


如何将文件夹打包成zip?