PHP ZipArchive删除空目录

时间:2012-08-13 23:09:36

标签: php file zip ziparchive

问题

我正在构建一个在线文件管理器,用于下载整个目录结构我正在生成所有子目录和文件的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 ZipArchivephp.net lib中的错误还是我错过了什么?我不想最终创建虚拟文件只是为了保持目录结构的完整。

0 个答案:

没有答案