在我的控制器中,我收到ZIP文件,其中可能包含xml和嵌套的多级zip文件。如何创建平面目录,其中只包含从所有zip文件递归提取的xml文件?
lp0sw83n1#
为了简单起见,我建议创建一个临时目录,将ZIP解压到该目录:
$zip = new ZipArchive; if ($zip->open('test.zip') === TRUE) { $zip->extractTo('tmp'); $zip->close(); } else { echo 'failed'; }
然后可能是一个递归函数来迭代所有文件。
function recursiveDirectoryIterator($path){ $out = []; foreach(glob($path . "/*") as $entry){ if ( is_dir($entry) ) { $sub = recursiveDirectoryIterator($entry); foreach($sub as $subEntry){ $out[] = $subEntry; } } else { $out[] = $entry; } } return $out; }
然后,使用以下命令完成:
foreach(recursiveDirectoryIterator("tmp") as $file){ if ( !rename ( $file , getcwd() . basename($file) ) { echo 'Failed to rename: ' . $file . ' to ' . getcwd() . basename($file) . '<br>'; } }
如果你有多个嵌套的ZIP压缩包,只需修改这个方法。2也许创建了一个key =〉value的压缩包列表,例如:
$archive['imagePack1'] = "tmp/archive1.zip"; $archive['imagePack2'] = "tmp/archive2.zip" foreach($archive as $key => $path){ $zip = new ZipArchive; if ($zip->open('tmp/' . $path) === TRUE) { $zip->extractTo('tmp/' . $key); $zip->close(); } else { echo 'failed'; } }
1条答案
按热度按时间lp0sw83n1#
为了简单起见,我建议创建一个临时目录,将ZIP解压到该目录:
然后可能是一个递归函数来迭代所有文件。
然后,使用以下命令完成:
如果你有多个嵌套的ZIP压缩包,只需修改这个方法。2也许创建了一个key =〉value的压缩包列表,例如: