我需要将 zip 存档中的目录内容提取到输出目录中。
zip 中的目录名称可以是任何名称。但是,它将是 zip 存档基础中的唯一目录。但是,在 zip 存档中,目录中可能有任意数量的文件。
zip 中的文件结构将遵循以下原则:
- d0001
- My Folder
- view.php
- tasks.txt
- file1.txt
- picture1.png
- document.doc
输出目录的内容需要如下所示:
- My Folder
- view.php
- tasks.txt
- file1.txt
- picture1.png
- document.doc
我目前拥有的代码删除了输出目录的内容并将整个 zip 存档提取到目录中:
function Unzip($source, $destination) {
$zip = new ZipArchive;
$res = $zip->open($source);
if($res === TRUE) {
$zip->extractTo($destination);
$zip->close();
return true;
} else {
return false;
}
}
function rrmdir($dir, $removebase = true) {
if(is_dir($dir)) {
$objects = scandir($dir);
foreach($objects as $object) {
if($object != "." && $object != "..") {
if(filetype($dir."/".$object) == "dir") rrmdir($dir."/".$object); else unlink($dir."/".$object);
}
}
reset($objects);
if($removebase == true)
rmdir($dir);
}
}
$filename = '/home/files.zip';
$dest = '/home/myfiles/';
if(is_dir($dest)) {
rrmdir($dest, false);
$unzip = Unzip($filename, $dest);
if($unzip === true) {
echo 'Success';
} else
echo 'Extraction of zip failed.';
} else
echo 'The output directory does not exist!';
该函数rrmdir()
所做的只是删除输出目录的内容。