PHP ZipArchive addFile() добавляет файлы дважды

У меня есть следующий код:

    $zip = new ZipArchive();
    $zip->open($nome, ZIPARCHIVE::CREATE);

    foreach($files as $file) {
        $zip->addFile($file,basename($file));
    }

$files — это массив с путями к реальным файлам, и они похожи на «../folder/anotherFolder/file1.txt», «../folder/anotherFolder/file2.txt» и так далее.

Zip-файл создан успешно, но когда я его разархивирую, у меня есть как file1.txt, так и file2.txt, как и ожидалось, из-за параметра basename($file) $zip->addFile(), а также папки/другой папки /file1.txt и папка/anotherFolder/file2.txt.

Если я уберу второй параметр, basename($file), в моем zip-файле не будет повторяющихся записей, но структура папок/других папок/ будет там, в то время как все, что я хотел, это просто и только файл1.txt и файл2.txt.

Любая идея, почему это происходит?


person Caio    schedule 20.06.2018    source источник
comment
У вас есть $zip->close(); позже в вашем коде? Судя по тому, что я вижу, ваш код выглядит нормально (при условии, что вы закроете его позже). ссылка douglasradburn.co.uk/create-a-zip- file-using-php и многие другие сайты делают это так...   -  person Nic3500    schedule 20.06.2018
comment
Да, есть $zip-›close(); позже. Я действительно не понимаю, почему это происходит =/   -  person Caio    schedule 20.06.2018


Ответы (1)


Я думал, что у меня та же проблема, а оказалось, что я работал с одним и тем же выходным файлом и не установил флаг ZipArchive::OVERWRITE:

В первой попытке я не устанавливал второй параметр для addFile(). Со второй попытки я его поставил, но так как выходной zip-файл уже существовал с моей первой попытки, файлы были только добавлены в архив, а исходные файлы остались на месте в архиве, создавая иллюзию двойного добавления. .

person charel    schedule 29.11.2018