首页 > 解决方案 > 将文件添加到 zip 中会添加包含文件的文件夹

问题描述

所以我有一个目录,它的根目录包含一个files文件夹,里面有一个test包含 txt 文件的文件夹,然后我有这个 php 代码:


    function displayZip($name)
   $zip = new ZipArchive();
   $filename = "files/$name.zip";

  if ($zip->open($filename, ZipArchive::CREATE)!==TRUE) {
      exit("cannot open <$filename>\n");
  }

  $dir = "files/$name/";
  createZip($zip, $dir);

  $zip->close();
  rmdir("files/$name");
 }

 function createZip($zip,$dir, $name){
  if (is_dir($dir)){

    if ($dh = opendir($dir)){
       while (($file = readdir($dh)) !== false){

         // If file
         if (is_file($dir.$file)) {
            if($file != '' && $file != '.' && $file != '..'){
               $zip->addFile($dir.$file);
            }
        }
   }
closedir($dh);
}
}

它为变量下的 zip 取一个名称,$name然后指定下面的完整路径,$filename然后创建 zip 存档,然后调用 createZip 函数,该函数打开与 zip 同名的目录,然后将该目录下的文件添加到 zip 中,但是当我调用displayZip(’test’)然后打开创建的 zip 时,我看到它在其中添加了files/test/文件夹。所以我的问题是:

  1. 它在代码中的什么位置添加这些文件夹,是否addFile$dir.$file部分一致?
  2. 我该怎么做才能只获取 zip 中的文件?

提前致谢

标签: phpzip

解决方案


默认情况下,ZipArchive将文件夹添加到存档中。您可以通过将“本地名称”指定为addFile(). 该“本地名称”将是 zip 存档中的结构。有关详细信息,请参阅https://www.php.net/manual/en/ziparchive.addfile.php

rmdir 可能无法正常工作,因为该目录不为空。


推荐阅读