我正在构建一个在线文件管理器,用于下载整个目录结构我正在生成所有子目录和文件的zip文件(递归),因此我使用RecursiveDirectoryIterator
。
这一切都运行良好,但空目录不在生成的zip文件中,尽管正确处理了目录。这就是我目前使用的:
<?php
$dirlist = new RecursiveDirectoryIterator($path, FilesystemIterator::SKIP_DOTS);
$filelist = new RecursiveIteratorIterator($dirlist, RecursiveIteratorIterator::SELF_FIRST);
$zip = new ZipArchive();
if ($zip->open($tmpName, ZipArchive::CREATE) !== TRUE) {
die();
}
foreach ($filelist as $key=>$value) {
$result = false;
if (is_dir($key)) {
$result = $zip->addEmptyDir($key);
//this message is correctly generated!
DeWorx_Logger::debug('added dir '.$key .'('.$this->clearRelativePath($key).')');
}
else {
$result = $zip->addFile($key, $key);
}
}
$zip->close();
如果我省略FilesystemIterator::SKIP_DOTS
我最终在所有目录中都有.
文件。
迭代器正常工作,addEmptyDir
调用正确执行(结果也被检查!),创建一个带有各种zip工具的zip文件与空目录一起工作。
这是phps ZipArchive
(php.net lib中的错误还是我错过了什么?我不想最终创建虚拟文件只是为了保持目录结构的完整。