Добавить файл в подпапку ZIP-архива?

Я хочу добавить подпапку с файлом в архив.

$files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($source), RecursiveIteratorIterator::SELF_FIRST);

Я не могу его использовать, потому что мне не нужны все файлы моей папки. У меня есть массив с некоторой информацией о файлах:

$paths = [
[
    'name' => 'file',
    'ext'  => 'txt',
    'path' => '/folder/'
],
[
    'name' => 'subFolder',
    'ext'  => 'folder',
    'path' => '/folder/'
],
[
    'name' => 'fileInSubFolder',
    'ext'  => 'txt',
    'path' => '/folder/subFolder/'
]
];

В цикле я делаю это:

if( $folder[$i]['ext'] == 'folder' )
    $zip->addEmptyDir($fileName);
else 
    $zip->addFromString( $fileName.$fileExt, file_get_contents($fileFullPath.$fileExt));

Если "папка", то я создаю в архиве пустую папку, иначе добавляю файл в архив. Но если файл находится в подпапке, то файл будет добавлен в корень архива. И как я могу добавить файл в новую пустую подпапку? Или как я могу изменить текущий каталог для добавления файла?


person Серафим    schedule 30.08.2016    source источник


Ответы (1)


Вы не «меняете каталог» с ZipArchive, вы всегда передаете абсолютный путь к файлу, когда добавление файла.

Теперь я не уверен, почему у вас есть массив $paths, но затем вы перебираете $folders, так как я не вижу весь ваш код, но если бы вы перебирали свой массив $paths, вы хотели бы добавить абсолютный путь, который вы сохранили, к перед именем файла.

$paths = [
[
    'name' => 'file',
    'ext'  => 'txt',
    'path' => '/folder/'
],
[
    'name' => 'subFolder',
    'ext'  => 'folder',
    'path' => '/folder/'
],
[
    'name' => 'fileInSubFolder',
    'ext'  => 'txt',
    'path' => '/folder/subFolder/'
]
];


if( $paths[$i]['ext'] == 'folder' ) {
    $zip->addEmptyDir($fileName);
} else {
    // This would create "/folder/subFolder/fileInSubFolder.txt"
    $fullFileName= $paths[$i]['path'] . $paths[$i]['name'] . "." . $paths[$i]['ext'];
    $zip->addFromString( $fullFileName, /* File Data Here */);
}
person Architect Nate    schedule 30.08.2016
comment
Благодарю вас! Я просто запутался. Я думал, что первый параметр в addFromString - это просто имя файла, но там нужно указать относительный путь, начиная с папки, которую вы хотите заархивировать. Большое спасибо! - person Серафим; 30.08.2016