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

标签 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();

如何为不应替换的文件和文件夹设置条件?如果可以使用某种循环,那就太好了。

感谢大家的帮助

最佳答案

你可以这样做,我测试过它对我有用:

// 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);

此解决方案基于 numFiles 属性和 getNameIndex方法,即使将存档结构化为子文件夹(条目看起来像/folder/subfolder/file.ext),它也能正常工作。 此外,extractTo方法采用第二个可选参数,该参数包含要提取的文件列表。

关于php - 如何让 ZipArchive 不覆盖某些文件和文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3092682/

相关文章:

php - 通过 iframe 上传文件在 IE 中不起作用

php - 不会抛出PHP 7中的错误

java - 有没有办法使用java动态地在zip文件中创建zip?

java - 在 Java 中从 ZipOutputStream 返回 Zip 文件

python - 使用 python 提取 tarfile 列表

php - 多个 AJAX 请求功能合并为一个?

php - 少/sass 与 php

php - 使用 array_search 进行多值搜索

linux - 创建 Zip 文件 Fedora 17

list - Powershell脚本列出目录中的Zip文件及其大小