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