如何解决Ziparchive始终包含父目录
我正在尝试将文件夹中的所有文件和文件夹压缩 结构如下:
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));
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。