Другими словами, вы хотите сгладить структуру каталогов zip-архива. Есть много способов сделать это.
Разархивируйте, а затем расплющить структуру папок
Можно было бы распаковать архив почтового индекса, а затем использовать DirectoryIterator ходить файлы и папки. Если папка обнаружена, переместите/скопируйте ее содержимое в каталог извлечения и затем удалите папку. Это сгладит структуру dir с каждой итерацией в папке.
https://stackoverflow.com/a/17087268/1163786
ZipArchive - разархивировать без папки
Другой подход будет распаковать архив ZIP, не заботясь о путях, хранящихся в нем, например, так:
$path = 'zipfile.zip'
$zip = new ZipArchive;
if ($zip->open($path) === true) {
for($i = 0; $i < $zip->numFiles; $i++) {
$filename = $zip->getNameIndex($i);
$fileinfo = pathinfo($filename);
copy("zip://".$path."#".$filename, "/your/new/destination/".$fileinfo['basename']);
}
$zip->close();
}
unzip -j или 7z -e
Наконец, он помечен как вопрос PHP, но: Если вы используете unzip
на CLI, используйте опцию -j
. Ìt означает «мусорные пути», что означает, что структура каталогов архива не воссоздается, при распаковке и хранении всех файлов в каталоге извлечения (по умолчанию используется текущий).
Это e
(для игнорирования дорожек), вместо x
(с полными путями) на 7z
. http://sevenzip.sourceforge.jp/chm/cmdline/commands/extract.htm