Создание ZIP архива средствами PHP

demosourse

В этом посту мы расскажем, как при помощи PHP создать ZIP архив из нескольких файлов. Это можно применить в коммерческих веб проектах: архивировать PDF, изображения, документы и так далее и отдавать на скачивание.

HTML

Форма состоит из списка чекбоксов с именем files[]:

<form name="zips" method="post">

<input type="checkbox" name="files[]" value="flowers.jpg" />
<img src="files/image.png" />
flowers.jpg

<input type="checkbox" name="files[]" value="fun.jpg" />
<img src="files/image.png" />
fun.jpg

<input type="checkbox" name="files[]" value="9lessons.docx" />
<img src="files/doc.png"   />
9lessons.docx
........
<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";
}
?>

Данный урок подготовлен для вас командой сайта ruseller.com
Источник урока: http://www.9lessons.info/2012/03/bootstrap-tutorial-for-blog-design.html
Перевел: Станислав Протасевич
Урок создан: 15 Июня 2013
Просмотров: 45240
Правила перепечатки


5 последних уроков рубрики "PHP"

  • Фильтрация данных с помощью zend-filter

    Когда речь идёт о безопасности веб-сайта, то фраза "фильтруйте всё, экранируйте всё" всегда будет актуальна. Сегодня поговорим о фильтрации данных.

  • Контекстное экранирование с помощью zend-escaper

    Обеспечение безопасности веб-сайта — это не только защита от SQL инъекций, но и протекция от межсайтового скриптинга (XSS), межсайтовой подделки запросов (CSRF) и от других видов атак. В частности, вам нужно очень осторожно подходить к формированию HTML, CSS и JavaScript кода.

  • Подключение Zend модулей к Expressive

    Expressive 2 поддерживает возможность подключения других ZF компонент по специальной схеме. Не всем нравится данное решение. В этой статье мы расскажем как улучшили процесс подключение нескольких модулей.

  • Совет: отправка информации в Google Analytics через API

    Предположим, что вам необходимо отправить какую-то информацию в Google Analytics из серверного скрипта. Как это сделать. Ответ в этой заметке.

  • Подборка PHP песочниц

    Подборка из нескольких видов PHP песочниц. На некоторых вы в режиме online сможете потестить свой код, но есть так же решения, которые можно внедрить на свой сайт.

или авторизуйтесь, чтобы добавлять комментарии, оценивать уроки и сохранять их в личном кабинете
  • 16 Июня 2013 07:54
    Inik1I
    Спасибо за урок! Я не знал что через php можно файлы в архив добавлять.
  • 16 Июня 2013 08:07
    art_gur
    Спасибо! Давно искал урок по архивации.
  • 16 Июня 2013 09:22
    misha1212
    Большое спасибо!
  • 16 Июня 2013 13:31
    basior
    Интересно! Было бы не плохо посветить урок по работе с файлами и директориями. Создание файлов и директорий стредствами PHP.
    • 17 Июня 2013 06:50
      userseal
      А php.net почитать? Там даже на русском есть. И примеры. http://www.php.net/manual/ru/ref.filesystem.php
  • 17 Июня 2013 07:54
    Ekspander
    Сайт очень полезный!!! А как можно сделать наоборот, в плане разархивировать файл с помощью php?
    • 17 Июня 2013 09:49
      timondrik1991
      Тоже интересен этот вопрос.
      • 17 Июня 2013 11:35
        ghbrjkbcn
        Аналогично ещё бы сделать создание файлов с заданным расширением было бы проще построить менеджер
        • 17 Июня 2013 12:03
          Ekspander
          Можно задавать расширение определенному файлу с помощью ftp_rename, к примеру на сервере FTP ftp_rename($conn_id, 'textFile', 'textFile.zip'); { echo "Файл переименован в zip формат $file \n"; } а вот интересно, бы сделать так чтобы можно было разархивировать файл скриптом php
  • 17 Августа 2015 03:13
    koldungsm
    Подскажите пожалуйста как сделать что бы при создании архива не создавалась полная иерархия папок указанного пути к папке с файлами? Типа: uploads/documents/tada/ Хотелось что бы все файлы были в корне архива. Спасибо!
^ Наверх ^