【发布时间】:2013-03-14 21:34:07
【问题描述】:
这对大多数人来说可能是一个愚蠢的问题,但我有以下文件夹,我想压缩它。
FolderI
Folder1
Folder2
Folder3
..
..
FolderN
现在,将FolderI 压缩成zipFile.zip 非常容易,因为网上有很多资源,特别是这里!但是,我想创建包含Folder1...FolderN 的zipFile.zip,这样当文件解压缩时,它会直接用Folder1...FolderN 填充当前目录,而不是创建FolderI,其中包含Folder1...FolderN。
我一直在尝试的一些事情是:
$zip = new ZipArchive();
// open archive
if ($zip->open('my-archive.zip', ZIPARCHIVE::CREATE) !== TRUE) {
die ("Could not open archive");
}
// initialize an iterator
// pass it the directory to be processed
$iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator("FolderI/"));
// iterate over the directory
// add each file found to the archive
foreach ($iterator as $key=>$value) {
$zip->addFile(realpath($key), $key) or die ("ERROR: Could not add file: $key");
}
// close and save archive
$zip->close();
这是从compress/archive folder using php script 获取的,我试图改变它。不过没用 - FolderI 仍然是压缩的。但是,当我解压缩 my-archive.zip 时,我会在其中得到一个 FolderI 和 Folder1..FolderN。我还在这里某处看到了来自@Alix 的代码,它做了同样的事情。但是,并没有真正关注太多。
任何形式的帮助都会很棒。如果不是代码,至少指出我正确的方向。
谢谢
****这里有人知道怎么做吗? ****
@Mods and Admins:是解决方案太简单还是 PHP 根本无法做到这一点?
【问题讨论】:
-
好问题。希望你能得到答案。如果你在几天内没有,提醒我,我可能会悬赏。
-
谢谢,@deceze!我很确定这很棘手。从昨天开始,我就在谷歌上大发雷霆。感谢您的有用评论! :)
-
您能否添加对它当前功能的描述(解释“虽然没有工作”?比如,您当前的代码是否仍然压缩
FolderI?跨度> -
@UnholyRanger:已编辑!希望这能让它更清楚。 :)
-
您的代码和描述将做两件截然不同的事情。该代码将所有文件放入 zip 中,没有任何目录结构(由于使用基本名称)。您的描述说 zip 包含文件夹:您的代码不能这样做。附:要获取当前文件的相对路径而不迭代基目录的路径,请使用 RecursiveDirectoryIterator 的
getSubPathname()方法。