Сегодня постараемся разобраться с вопросом генерации ZIP-архива средствами php.
На авторство решения не претендую — когда столкнулся с задачей — нашел данный работающий пример на stackoverflow
. Итак, ниже пример метода, который по массиву входящих файлов генерирует ZIP-архив. Как видно с примера формат входящих данных следующий:$files = [ ['file_name' => 'nameInZip1.pdf', '/path/to/file/1.pdf'], ['file_name' => 'nameInZip2.pdf', '/path/to/file/2.pdf'], ['file_name' => 'nameInZip3.pdf', '/path/to/file/3.pdf'] ];После формирования данного массива можно передавать его в метод ниже и получать результат:
/** * Generate and download zip file * * @throws Exception */ private function createZip($files, $zipname) { $file = 'full_path_to_file/your_file_name.zip'; $zip = new ZipArchive(); if ($zip->open($file, ZipArchive::CREATE) !== TRUE) { throw new \Exception('Cannot create a zip file'); } foreach($files as $file){ $zip->addFile($file[file_name], $file[local_name]); } $zip->close(); header('Content-Type: application/zip'); header("Content-Disposition: attachment; filename='".$zipname."'"); header('Content-Length: ' . filesize($zipname)); header("Location: '.$zipname.'"); }Ну вот и весь пример. Если Вам также интересно, как отдавать файлы на скачивание при помощи Yii2 - об этом я писал здесь.
Удачи!