如何让ZipArchive不会覆盖某些文件和文件夹

Abs*_*Abs 3 php zip

我想将一个zip文件夹解压缩到一个位置,并替换除少数文件和文件夹之外的所有文件和文件夹,我该怎么做?

我目前正在做以下事情.

$backup = realpath('./backup/backup.zip');

$zip = new ZipArchive();

if ($zip->open("$backup", ZIPARCHIVE::OVERWRITE) !== TRUE) {

    die ('Could not open archive');

}

$zip->extractTo('minus/');

$zip->close();
Run Code Online (Sandbox Code Playgroud)

如何为不应替换的文件和文件夹添加条件?如果可以使用某种循环那将是很好的.

谢谢大家的帮助

Vic*_*ciu 7

你可以这样做,我测试了它,它适用于我:

// make a list of all the files in the archive
$entries = array();
for ($idx = 0; $idx < $zip->numFiles; $idx++) {
    $entries[] = $zip->getNameIndex($idx);
}

// remove $entries for the files you don't want to overwrite

// only extract the remaining $entries
$zip->extractTo('minus/', $entries);
Run Code Online (Sandbox Code Playgroud)

该解决方案是基于numFiles属性和getNameIndex方法,和它的作品,即使归档的结构分为子文件夹(条目看起来像/folder/subfolder/file.ext).此外,extractTo方法接受第二个可选的paramer,它包含要提取的文件列表.