Класс Zip Encoding
Класс 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');
Функции класса ZIP
$this->zip->add_data()
Позволяет добавлять данные в Zip архив. Первый параметр должен содержать имя для файла, второй параметр данные с типом строка:
$name = 'my_bio.txt';
$data = 'Я был рожден в лифте...';
$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');
$this->zip->archive()
Записывает Zip файл в директорию на сервере. Укажите правильный путь на сервере, заканчивающийся именем файла. У директории должны стоять права на запись(666 или 777 обычно). Пример:
$this->zip->archive('/path/to/folder/myarchive.zip'); // Creates a file named 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 класс кеширует 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"); //Читает содержимое файла
$this->zip->download('myphotos.zip');