Блог веб разработки

Блог веб-разработки статьи | видеообзоры | исходный код

Php zip, работа с zip-архивами

Приветствую всех! Сегодня будут рассмотрены операции с zip архивами в php через специальный стандартный модуль zip. Отмечу что на некоторых хостингах(серверах) данный модуль может быть по умолчанию отключен. Я уже с таким сталкивался. Поэтому активировать его придется вручную. На многих VDS/VPS серверах такая возможность есть, что касается виртуальных хостингов, здесь по ситуации. Не стоит раньше времени отчаиваться, возможно модуль на вашем сервере уже активирован и как это проверить мы сейчас узнаем. Поехали!

Чтобы начать работу с модулем zip, нам нужно обратится к специальному классу ZipArchive():

$zip = new ZipArchive();
var_dump($zip);

Здесь на выходе мы получаем объект zip, через который можем выполнять различные операции с zip архивами. Если после данной строчки у вас не выводится ошибок, значит модуль активирован и мы можем продолжать.

Начнем с добавления файлов:

$zip = new ZipArchive();
 if($zip->open(__DIR__.'/new.zip', ZIPARCHIVE::CREATE) === true){
    $zip->addFile('slide4.jpg');
    echo 'Файл slide4.jpg добавлен в new.zip!';
  }
 $zip->close();

В данном примере мы генерируем файл new.zip в текущей директории и помещаем в него картинку slide4.jpg. Вот как это работает:

Разберем подробнее:

В самом начале мы открываем zip архив с помощью метода open(). Данный метод принимает в себя два аргумента:

- Путь к создаваемому zip архиву

- Специальный флаг ZIPARCHIVE::CREATE

Метод возвращает boolean значение (true,false). Если zip архив открыт на запись то true, если нет false.

Файл (картинка) slide4.jpg добавляется с помощью метода addFile(). Данный метод принимает аргумент - путь до файла. Заметьте что в конце мы обращаемся к еще одному методу close(). Он закрывает zip - архив чтобы не кушалась память.

Чтобы добавить несколько файлов:

$zip = new ZipArchive();
if($zip->open(__DIR__.'/new.zip', ZIPARCHIVE::CREATE) === true){
   $zip->addFile('slide4.jpg');
   $zip->addFile('test.html');
 }
$zip->close();

Для более универсального решения добавления файлов можно воспользоваться методом addGlob():

$zip = new ZipArchive();
if($zip->open(__DIR__.'/new.zip', ZIPARCHIVE::CREATE) === true){
    $options = array('add_path' => '/', 'remove_all_path' => TRUE);
    $zip->addGlob('*.{php,jpg,html}', GLOB_BRACE, $options);
    $zip->close();
 }

Данный метод принимает в себя три аргумента:

- Строка шаблон в которой указываются расширения файлов которые должны быть добавлены в zip архив

- Флаг GLOB_BRACE

- Опции: add_path - путь к файлам в zip архиве(/ корневая директория)

В результате работы данного примера все файлы из текущей директории с расширениями php,jpg,html будут записаны в корень zip архива.

Если вам нужны все файлы текущей директории не вопрос!

$zip = new ZipArchive();
if($zip->open(__DIR__.'/new.zip', ZIPARCHIVE::CREATE) === true){
    $options = array('add_path' => '/', 'remove_all_path' => TRUE);
    $zip->addGlob('*.{*}', GLOB_BRACE, $options);
    $zip->close();
 }

Вместо всех расширений просто ставите знак * и в итоге помещаете в zip архив все файлы текущей директории.

Теперь рассмотрим как создавать директории в zip архиве.

$zip = new ZipArchive();
if($zip->open(__DIR__.'/new.zip', ZIPARCHIVE::CREATE) === true){
   $zip->addEmptyDir('site');
 }
$zip->close();

С помощью данного примера мы создали папку site в zip архиве. Причем метод addEmptyDir() создает пустую папку.

Для того чтобы создать папку и заполнить ее файлами можно применить нашу предыдущую конструкцию.

$zip = new ZipArchive();
if($zip->open(__DIR__.'/new.zip', ZIPARCHIVE::CREATE) === true){
    $options = array('add_path' => 'site/', 'remove_all_path' => TRUE);
    $zip->addGlob('*.{php,jpg,html}', GLOB_BRACE, $options);
    echo "zip архив создан!";
    $zip->close();
 }

Этот код в zip архиве создаст папку site и поместит в нее файлы с расширениями php,jpg,html из текущей директории:

Как видите все работает!

Однако у вас может возникнуть закономерный вопрос как добавить существующую директорию с файлами в zip архив.

Вот пример:

$zip = new ZipArchive();
if($zip->open(__DIR__.'/new.zip', ZIPARCHIVE::CREATE) === true){
    $options = array('add_path' => 'test/', 'remove_all_path' => TRUE);
    $zip->addGlob('test/*.{*}', GLOB_BRACE, $options);
    echo "zip архив создан!";
    $zip->close();
 }

С помощью этого кода мы можем добавить папку test со всеми включенными в нее файлами в zip архив.

И так, с добавлением информации в zip архив мы разобрались, теперь переходим к изъятию информации или распаковке.

Процесс изъятия данных из zip архива происходит довольно просто:

$zip = new ZipArchive();
if($zip->open(__DIR__.'/new.zip', ZIPARCHIVE::CREATE) === true){
     $zip->extractTo(__DIR__);
     echo "zip файл распакован!";
    $zip->close();
 }

C помощью метода extractTo() происходит распаковка. Метод принимает один параметр - путь куда будет извлечена информация.

Здесь из архива new.zip была распакована папка test со всем содержимым.

В общем все самое основное при работе с zip архивами мы рассмотрели, кому необходимо больше информации вот ссылка на manual

https://www.php.net/manual/ru/book.zip.php.

Надеюсь данная информация была для вас полезна. С вами был Грибин Андрей.

До скорых встреч!

Оцените статью

Еще статьи

Объявление переменных альтернатива ключевому слову var

Градиенты в CSS

Функции для обработки входных данных в PHP.

CSS media

Уведомления javascript

CSS counter-increment

Свойство clip в css3

Свойство clip-path в css

Комментарии

Проверочный код

В данном разделе пока нет комментариев!

История

    ПОДПИСКА

    • Подпишись и получай информацию о выходе новых статей на почту! Просто введите свою почту, нажмите кнопку подписаться. На почту должно будет прийти сообщение с потверждением подписки. Если сообщение не пришло проверьте раздел спам или попробуйте другую почту. Также по всем техническим проблемам вы можете написать в поддержку

    НОВОСТИ

    • Всем привет! Запустил новый сервис для поиска и бесплатного скачивания, прослушивания аудиокниг. Здесь вы можете найти множество литературы и прослушать ее. Вскоре возобновлю написание статей.