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

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

Php 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.

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

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

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

Еще статьи

map js

IN BETWEEN SQL

курсор CSS

Javascript window

Откат GIT

column css

Волшебные Константы php

карта изображения html

Broadcast Channel

Комментарии

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

История

    НОВОСТИ

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