Ziparchive 总是包含父目录

Ziparchive always includes parent directory

我正在尝试压缩一个文件夹中的所有文件和文件夹 结构如下所示:

storage/app/3
 - folder 1
   -file 1
   -file 2
 - folder 2
   -file 3

当我 运行 zip 脚本时,我希望 zip 3.zip 包含下一级中的所有文件夹和文件 但是我总是以:

3.zip
 - 3
   - folder 1
   -file 1
   -file 2
   - folder 2
   -file 3

我想要的地方:

 3.zip
   - folder 1
     -file 1
     -file 2
   - folder 2
     -file 3

该代码在我的 Linux 服务器上运行,但在 IIS 和 windows 上我获得了额外的级别。

这是我的代码:

 $rootPath = public_path() .'/storage/app/' . $request->course_id . '/';        
 $zip = new ZipArchive();
 $zip->open(public_path() .'/storage/app/' . $request->course_id . '/' . $request->course_id . '.zip', (ZipArchive::CREATE | ZipArchive::OVERWRITE));
    
  $files = new \RecursiveIteratorIterator(
                new \RecursiveDirectoryIterator($rootPath),
                \RecursiveIteratorIterator::LEAVES_ONLY
            );
    
            
  foreach($files as $name => $file)  {  
    if (!$file->isDir() AND (strpos($name, $request->course_id.'.zip') === FALSE)){
      $zip->addFile($file, str_replace("C:\sites\cnnect-portal\public/storage/app/","", $file));
     } 
   }

我试图通过说 'if $name == $request->course_id' 跳过这个来从循环中排除文件,但这不起作用,因为我没有看到 $name 只是文件夹名称。

这将从路径中提取文件名。
$zip->addFile($file,basename($file));

另一种猜测是您还需要在此处包括 course_id

  foreach($files as $name => $file)  {  
    if (!$file->isDir() AND (strpos($name, $request->course_id.'.zip') === FALSE)){
      $zip->addFile($file, str_replace("C:\sites\cnnect-portal\public/storage/app/3","", $file));
     } 
   }