Php. Как сгенерировать ZIP-архив?


Сегодня постараемся разобраться с вопросом генерации 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 - об этом я писал здесь.

Удачи!

, ,

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *