Получите помощь, поддержку и профессиональное общение в Клубе CodeIgniter

# CodeIgniter User Guide Version 2.1.0

Search User Guide

# Класс Zip Encoding

Класс Zip Encoding позволяет вам создавать архивы Zip. Архивы могут быть загружены на ваш десктоп, или сохранены в директории.

## Инициализация класса

Как и большинство других классов в CodeIgniter, класс Zip инициализируется в вашем контроллере посредством функции $this->load->library:

`$this->load->library('zip');`

Загруженный класс библиотеки Zip доступен для использования как $this->zip

## Пример использования

Этот пример демонстрирует, как сжать файл, сохранить его в директорию на вашем сервере, и загрузить его на десктоп.

`$name = 'mydata1.txt';
$data = 'A Data String!';
$this->zip->add_data($name, $data);
// Записывает zip-файл в директорию на вашем сервере. Назовем его "my_backup.zip"
$this->zip->archive('/path/to/directory/my_backup.zip');
// Загружает файл на ваш десктоп. Назовем его "my_backup.zip"
$this->zip->download('my_backup.zip');`

# Справка по функциям

## $this->zip->add_data()

Позволяет вам добавить данные в zip-архив. Первый параметр должен содержать имя, которое вы даете файлу, а второй параметр должен содержать данные файла в строке:

`$name = 'my_bio.txt';
$data = 'I was born in an elevator...';
$this->zip->add_data($name, $data);`

Вы можете вызвать несколько раз эту функцию, чтобы добавить несколько файлов в архив. Пример:

`$name = 'mydata1.txt';
$data = 'A Data String!';
$this->zip->add_data($name, $data);
$name = 'mydata2.txt';
$data = 'Another Data String!';
$this->zip->add_data($name, $data);
`

Или вы можете передать множество файлов, используя массив:

`$data = array(
'mydata1.txt' => 'A Data String!',
'mydata2.txt' => 'Another Data String!'
);
$this->zip->add_data($data);
$this->zip->download('my_backup.zip');`

Если вы хотите организовать сжатые файле в поддиректории, включите путь как часть имени файла:

`$name = '`personal/`my_bio.txt';
$data = 'I was born in an elevator...';
$this->zip->add_data($name, $data);`

Пример выше поместит my_bio.txt в поддиректорию `personal`.

## $this->zip->add_dir()

Позволяет вам добавить директорию. Обычно эта функция излишняя, так как вы моежте помещать файлы в директории, используя $this->zip->add_data(), но если вы хотите создать пустую директорию, вы можете сделать это. Пример:

`$this->zip->add_dir('myfolder'); // Создает каталог myfolder`

## $this->zip->read_file()

Позволяет вам сжать файл, который уже существует где-то на вашем сервере. Передайте файловый путь и класс Zip считает его и добавит в архив:

`$path = '/path/to/photo.jpg';
$this->zip->read_file($path);
// Загрузить файл на ваш десктоп. Назовем его "my_backup.zip"
$this->zip->download('my_backup.zip');`

Если вы хотите, чтобы zip-архив содержал целую директорию, с файлом в ней, передайте `TRUE` во втором параметре. Пример:

`$path = '/path/to/photo.jpg';
$this->zip->read_file($path, `TRUE`);
// Загрузить файл на ваш десктоп. Назовем его "my_backup.zip"
$this->zip->download('my_backup.zip');`

В примере выше файл photo.jpg будет помещен в поддиректории `path/to/`

## $this->zip->read_dir()

Позволяет вам сжать директорию (и ее содержимое), которая уже существует где-то на вашем сервере. Передайте файловый путь к директории, и класс zip рекурсивно считает ее и воссоздаст в архиве zip. Все файлы, содеражщиеся по указанному пути, будут архивированы, как и все найденные поддиректории. Пример:

`$path = '/path/to/your/directory/';
$this->zip->read_dir($path);
// Загрузить файл на ваш десктоп. Назовем его "my_backup.zip"
$this->zip->download('my_backup.zip');`

По умолчанию в архив zip будут помещены все директории, указанные в первом параметре. Если вы хотите, чтобы дерево, предшествующее целевой директории, игнорировалось, вы можете передать `FALSE` во втором параметре. Пример:

`$path = '/path/to/your/directory/';
$this->zip->read_dir($path, FALSE);`

Создаст ZIP с директорией "directory" внутри, и все ее поддиректории будут корректно сохранены внутри, но не будет включен путь `/path/to/your`.

## $this->zip->archive()

Записывает файл с архивом zip в директорию на вашем сервере. Передайте правильный серверный путь, заканчивающийся именем. Убедитесь, что директория является записываемой. Пример:

`$this->zip->archive('/path/to/folder/myarchive.zip'); // Создает файл myarchive.zip`

## $this->zip->download()

Загружает zip-файл с вашего сервера на десктоп. Функции нужно передать имя zip-файла. Пример:

`$this->zip->download('latest_stuff.zip'); // Файл будет назван "latest_stuff.zip"`

Примечание: Не выводите никаких данных в контроллере, в котором вы вызываете эту функцию, так как она отправляет различные серверные заголовки, чтобы случилась загрузка и файл был воспринят как бинарный.

## $this->zip->get_zip()

Возвращает данные, сжатые в zip. Обычно вам не будет нужна эта функция, разве что чтобы сделать что-то особенное с данными. Пример:

`$name = 'my_bio.txt';
$data = 'I was born in an elevator...';
$this->zip->add_data($name, $data);
$zip_file = $this->zip->get_zip();`

## $this->zip->clear_data()

Класс zip кеширует ваши данные, поэтому следует перекомпилировать их перед каждым новым использованием функции. Если, к примеру, вы создаете несколько архивов, каждый с разными данными, вы должны очистить кеш между вызовами. Пример:

`$name = 'my_bio.txt';
$data = 'I was born in an elevator...';
$this->zip->add_data($name, $data);
$zip_file = $this->zip->get_zip();
`$this->zip->clear_data();`
$name = 'photo.jpg';
$this->zip->read_file("/path/to/photo.jpg"); // Читает содержимое файла
$this->zip->download('myphotos.zip');`

### Поделиться

Переведено в компании Аринт.

# Спасибо!

Вы тоже можете оказать помощь проекту! Как это сделать?

## Помощь и поддержка

Вы можете задать вопросы и получить ответы и советы от гуру CodeIgniter и веб-разработки: вступайте в Клуб CodeIgniter