Как при помощи PHP создать ZIP архив из нескольких файлов. Это можно применить в коммерческих веб проектах: архивировать PDF, изображения, документы и так далее и отдавать на скачивание.
HTML Форма состоит из списка чекбоксов с именем files[]:
<form name="zips" method="post">
<input type="checkbox" name="files[]" value="flowers.jpg" />
<img src="files/image.png" />
<input type="checkbox" name="files[]" value="fun.jpg" />
<img src="files/image.png" />
<input type="checkbox" name="files[]" value="9lessons.docx" />
<img src="files/doc.png" />
<input type="submit" name="createpdf" value="Download as ZIP" />
<input type="reset" name="reset" value="Reset" />
</form>
PHP Помещаем выбранные файлы в ZIP формат:
<?php
$error = "";
if(isset($_POST['createpdf'])) {
$post = $_POST;
$file_folder = "files/"; // папка с файлами
if(extension_loaded('zip')) {
if(isset($post['files']) and count($post['files']) > 0) { // проверяем выбранные файлы
$zip = new ZipArchive(); // подгружаем библиотеку zip
$zip_name = time().".zip"; // имя файла
if($zip->open($zip_name, ZIPARCHIVE::CREATE)!==TRUE) {
$error .= "* Sorry ZIP creation failed at this time"; }
foreach($post['files'] as $file) {
$zip->addFile($file_folder.$file); // добавляем файлы в zip архив}
$zip->close();
if(file_exists($zip_name)) { // отдаём файл на скачивание
header('Content-type: application/zip');
header('Content-Disposition: attachment; filename="'.$zip_name.'"');
readfile($zip_name); // удаляем zip файл если он существует
unlink($zip_name);
}
} else $error .= "* Please select file to zip ";
} else $error .= "* You dont have ZIP extension";
}
?>