#php #compression
#php #сжатие
Вопрос:
Я хочу, чтобы код преобразовывал все файлы в дереве в zip-файлы в корневом каталоге
<?PHP
// create object
$zip = new ZipArchive();
// open archive
if ($zip->open('my-archive.zip', ZIPARCHIVE::CREATE) !== TRUE) {
die ("Could not open archive");
}
// list of files to add
// list of files to add
$fileList = array(
'im/asd.pdf',
'im/df.pdf',
'im/d/qoyyum.txt'
);
// add files
foreach ($fileList as $f) {
$zip->addFile($f) or die ("ERROR: Could not add file: $f");
}
// close and save archive
$zip->close();
echo "Archive created successfully.";
?>
например, папка /im содержит
/im/asd.pdf
/im/df.pdf
/im/d/qoyyum.txt
‘my-archive.zip ‘ извлечение должно выглядеть следующим образом
my-archive/asd.pdf
my-archive/df.pdf
my-archive/qoyyum.txt
Я хочу предотвратить иерархию папок при извлечении zip-файла. чтобы все файлы находились в корневом каталоге извлеченной zip-папки
пожалуйста, предложите совет, как это сделать
Ответ №1:
В ZipArchive::addFile()
вызываемом localname
файле есть второй параметр (смотрите здесь), который позволяет вам задать локальное имя файла в zip-архиве. Используйте это, чтобы переопределить структуру каталогов, которая используется по умолчанию.
foreach ($fileList as $f) {
$filename_parts = explode('/', $f); // Split the filename up by the '/' character
$zip->addFile($f, end($filename_parts)) or die ("ERROR: Could not add file: $f");
}
Комментарии:
1. Вместо explode и end() вы также можете использовать
basename()
функцию для получения имени файла