Pull to refresh

Работа с 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, то тоже будет всё нормально работать.
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.