1

問題

ディレクトリ構造全体をダウンロードするために、すべてのサブディレクトリとファイルの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 または何か不足していますか? ディレクトリ構造をそのまま維持するためだけにダミー ファイルを作成することはしたくありません。

4

0 に答える 0