Приветствую всех! Сегодня будут рассмотрены операции с 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.Надеюсь данная информация была для вас полезна. С вами был Грибин Андрей.
До скорых встреч!