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));
}
}
我正在尝试压缩一个文件夹中的所有文件和文件夹 结构如下所示:
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));
}
}