Добавление файлов в zip добавляет папки, содержащие файлы - PullRequest
1 голос
/ 13 апреля 2020

Итак, у меня есть каталог, в котором находится папка root a 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. Что я могу сделать, чтобы получить только файлы внутри почтового индекса?

Заранее спасибо

1 Ответ

1 голос
/ 13 апреля 2020

По умолчанию ZipArchive добавляет папки в архив. Вы можете удалить папки, указав «localname» в качестве второго параметра в addFile(). Это «локальное имя» будет структурой внутри zip-архива. Подробнее см. https://www.php.net/manual/en/ziparchive.addfile.php.

Вероятно, rmdir не работает, поскольку каталог не пустой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...