1

问题

我正在构建一个在线文件管理器,用于下载整个目录结构,我正在生成所有子目录和文件的 zip 文件(递归),因此我使用RecursiveDirectoryIterator. 这一切都很好,但空目录不在生成的 zip 文件中,尽管 dir 处理正确。这是我目前正在使用的:

<?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 中的错误ZipArchivephp.net lib 还是我遗漏了什么?我不想最终创建虚拟文件只是为了保持目录结构完整。

4

0 回答 0