Zip класс 

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

Использование 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');

Справка класса 

class CI_Zip 
$compression_level = 2

Уровень сжатия.

Может варьироваться от 0 до 9, где 9 - самый высокий и 0 - без эффективного сжатия:

$this->zip->compression_level = 0;
add_data($filepath[, $data = NULL]) 
Параметры:
  • $filepath (смешанный) – Путь файла или массив пар файл => данные
  • $data (массив) – Содержимое файла (игнорируется, если $filepath массив)
Возвращаемый тип:

смешанный

Добавляет данные в zip архиве. Может работать как с одним файлом так и с несколькими файлами.

При добавлении одного файла, первый параметр должен содержать имя файла, а второй должен содержать содержимое файла:

$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);

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

$name = 'personal/my_bio.txt';
$data = 'I was born in an elevator...';

$this->zip->add_data($name, $data);

Пример выше разместит my_bio.txt файл в папке personal.

add_dir($directory) 
Параметры:
  • $directory (смешанный) – Строку с именем каталога или массив из нескольких каталогов
Возвращаемый тип:

пустота

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

$this->zip->add_dir('myfolder'); // Создает каталог с названием "myfolder"
read_file($path[, $archive_filepath = FALSE]) 
Параметры:
  • $path (строка) – Путь к файлу
  • $archive_filepath (смешанный) – Новые имя/путь (строка) или (булево) стоит ли поддерживать оригинальный путь
Возвращает:

TRUE при успехе, FALSE при неудаче

Возвращаемый тип:

булево

Позволяет сжимать файл, который уже существует где-то на сервере. Укажите путь к файлу и класс 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/ каталог.

Вы также можете указать новое имя (содержащее путь) для добавлен файла на лету:

$path = '/path/to/photo.jpg';
$new_path = '/new/path/some_photo.jpg';

$this->zip->read_file($path, $new_path);

// Сохранить ZIP архив содержащий /new/path/some_photo.jpg
$this->zip->download('my_archive.zip');
read_dir($path[, $preserve_filepath = TRUE[, $root_path = NULL]]) 
Параметры:
  • $path (строка) – Путь к каталогу
  • $preserve_filepath (булево) – Стоит ли поддерживать оригинальный путь
  • $root_path (строка) – Часть пути исключаемая из архива каталога
Возвращает:

TRUE при удаче, FALSE при неуспехе

Возвращаемый тип:

булево

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

$path = '/path/to/your/directory/';

$this->zip->read_dir($path);

// Скачать файл на компьютер. Имя архива "my_backup.zip"
$this->zip->download('my_backup.zip');

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

$path = '/path/to/your/directory/';

$this->zip->read_dir($path, FALSE);

Это позволит создать в Zip директорию с именем “directory”, с вложенными каталогами указанного внутри, но не будет включать в себя /path/to/your часть пути.

archive($filepath) 
Параметры:
  • $filepath (строка) – Путь к Zip архиву
Возвращает:

TRUE при удаче, FALSE при неуспехе

Возвращаемый тип:

булево

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

$this->zip->archive('/path/to/folder/myarchive.zip'); // Создает файл с именем myarchive.zip
download($filename = 'backup.zip') 
Параметры:
  • $filename (строка) – Имя файла архива
Возвращаемый тип:

пустота

Служит для загрузки Zip файла с вашего сервера. Вы должны передать имя zip файла для загрузки. Пример:

$this->zip->download('latest_stuff.zip'); // File will be named "latest_stuff.zip"

Примечание

Не отображайте данные этого метода в контроллере, так как он посылает различные заголовки сервера, которые скачивают файл и файл обрабатывается как двоичный.

get_zip() 
Возвращает:Содержимое 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();
clear_data() 
Возвращаемый тип:пустота

Zip класс кеширует ваши данные, так что для этого не нужно перекомпилировать 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();

$name = 'photo.jpg';
$this->zip->read_file("/path/to/photo.jpg"); // Read the file's contents

$this->zip->download('myphotos.zip');