Работа с Zip архивами через PHP

Рассказ будет о том, как работать с маленьким PHP классом PclZip, в котором всего 5698 строк с комментариями. Как уже можно было догадаться из названия этот класс для работы с Zip архивами. Я в сжатой форме познакомлю вас с данным классом.


1. Создание архива с нуля


Для создания архива с нуля пишем:

<?php
include_once(‘pclzip.lib.php’); //Подключаем библиотеку.
$archive = new PclZip('archive.zip'); //Создаём объект и в качестве аргумента, указываем название архива, с которым работаем.
$result = $archive->create('file.txt'); // Этим методом класса мы создаём архив с заданным выше названием
var_dump($result); // Если всё прошло хорошо, возращаем массив с данными (время создание архива, занесённым файлом и т.д)
if($result == 0) {
echo $archive->errorInfo(true); //Возращает причину ошибки
}
?>

Но если вам надо заархивировать например файл file.txt, который лежит в папке folder и надо сделать так, чтобы file.txt лежал в корне архива, а не полность папка folder с file.txt, можно сделать так
<?
$result = $archive->create('folder/file.txt', PCLZIP_OPT_REMOVE_PATH, 'folder');
?>

Если надо взять файл из одной папки и переместить его в архиве в другую папку, пишем
<?
$result = $archive->create('folder/file.txt', PCLZIP_OPT_REMOVE_PATH, 'folder', PCLZIP_OPT_ADD_PATH, 'install');
?>


То есть мы взяли файл file.txt в папке folder, вытащили и поместили в архиве в папку install.
Для добавления комметария к архиву надо добавить к create PCLZIP_OPT_COMMENT, ‘Комментарий’.

2. Добавление файлов в архив.


Здесь практически всё тоже самое, что и при создании архива с 0.
<?php
include_once(‘pclzip.lib.php’);
$archive = new PclZip('archive.zip'); //Указываем существующий архив
if($archive->add('file.txt') == 0) echo $archive->errorInfo(true);
?>


Метод add тоже может использовать PCLZIP_OPT_REMOVE_PATH и PCLZIP_OPT_ADD_PATH, что логично.

3. Вывод содержимого архива

Для этой операции у нас в наличии есть метод listContent(). По сути этот метод возращает ту же информацию, что и предыдущие два метода, после заверщения их работы.
<?
$archive = new PclZip('archive.zip');
$result = $archive->listContent();
if ($result == 0) { //Возращает 0, если операция не удалась.
echo $archive->errorInfo(true); //Вывод ошибки.
} else {
foreach($result as $id=> $v1) { // перебор массива с файлами. В переменную $id попадает индекс файла в архиве, который пригодится нам далее, а переменная $v1 становится массивом с данными о файле.
foreach($v1 as $kk=>$v2) { // перебор массива с информацией о файле в архиве
echo "$kk - $v2 ";
}
}
}
?>


4. Удаление файлов из архива

Для удаление всех файлов из архива прибегним к методу
<?
$archive = new PclZip('archive.zip');
$result = $archive->delete();
if($result == 0) echo $archive->errorInfo(true);
?>

После этого архив останется просто пустой оболочкой. Для удаления одиночных файлов, нам надо сделать так:
<?
$archive->delete(PCLZIP_OPT_BY_INDEX, '1,2');
?>

Этим самым мы указываем, какие файлы удалять. Мы указываем через запятую индификатор файла, которого мы хотим удалить. Индификаторы мы можем получить через функцию, которая рассматривалась выше (listContent).

5. Разархивирование

<?
$archive = new PclZip('archive.zip');
$result = $archive->extract();
if($result == 0) echo $archive->errorInfo(true);
?>

В этом случае будет разархивирован весь архив. Для разархивации в папку делаем так.
<?
$result = $archive->extract(PCLZIP_OPT_PATH, 'folder');
?>


Вот и всё. Это была обзорная статья и она раскрыла не все возможности данного класса, но то что описано здесь, достаточно для обычного использования. Ах да, если заменить zip на rar, то тоже будет всё нормально работать.
Теги:
zip, php, rar, архив, архивация

Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.