【发布时间】:2022-12-20 00:54:32
【问题描述】:
我正在尝试将一系列文件压缩到一个没有任何目录的 zip 文件中。只是文件。问题是生成的 Zip 文件包含名为 _ 的目录中的所有文件。我不知道这个目录来自哪里。这是我创建 Zip 文件的代码:
$zip = new ZipArchive();
$zip->open($filepath, ZipArchive::CREATE);
$files = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($tempPath),
RecursiveIteratorIterator::LEAVES_ONLY
);
/** @var SplFileInfo $file */
foreach ($files as $file) {
if (!$file->isDir()) {
$zip->addFile($file->getRealPath(), basename($file->getFilename()));
}
}
zip->close();
我认为 $file->getFilename() 足以将文件放在 zip 文件的根级别,但添加了 basename 因为那不起作用。我无法将文件放在 zip 文件的根目录中,也无法创建目录 _ 来放入它们。不知道下划线目录来自哪里。
如果它有所不同,文件是从通过符号链接链接的位置获取的。在 Ubuntu 服务器上。
任何人都知道发生了什么以及如何解决它?
Here's an example of the output zip file. 有趣的是,在 Google 的预览中它看起来是正确的,但如果你在 zip 查看器(如 Windows 的默认提取器或 7zip)中打开它,文件都在 _ 目录中。
我在一个名为 Anki 的应用程序中使用这些 zip,看起来这个应用程序也在子目录中检测到它们。这里出了点问题,但我无法弄清楚是什么......
【问题讨论】:
-
$filepath的价值是多少 -
它类似于
/path/storage/directory/app/。这是保存 zip 文件的地方。它在该位置正确保存。它只是没有将文件正确插入到 zip 文件的根目录中。 -
很抱歉问,但是,你有没有检查所涉及的变量的值(使用步骤调试器或普通的
var_dump()),尤其是。basename($file->getFilename()),并将它们与实际输出进行比较? -
是的,我确实调试了它,
basename($file->getFilename())只给出了文件名,没有任何路径或子目录。 -
另一个猜测...您如何检查生成的 ZIP 文件?
_根级目录是否可能是某些 GUI 程序的抽象?您可以在问题中添加屏幕截图吗?