Класс Zip Encoding
Класс Zip Encoding позволяет вам создавать архивы Zip. Архивы могут быть загружены на ваш десктоп, или сохранены в директории.
Инициализация класса
Как и большинство других классов в CodeIgniter, класс Zip инициализируется в вашем контроллере посредством функции $this->load->library:
$this->load->library('zip');
Загруженный класс библиотеки Zip доступен для использования как $this->zip
Пример использования
Этот пример демонстрирует, как сжать файл, сохранить его в директорию на вашем сервере, и загрузить его на десктоп.
$name = 'mydata1.txt';
$data = 'Строка с данными!';
$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 = 'Я родился в лифте...';
$this->zip->add_data($name, $data);
Вы можете вызвать несколько раз эту функцию, чтобы добавить несколько файлов в архив. Пример:
$name = 'mydata1.txt';
$data = 'Строка с данными!';
$this->zip->add_data($name, $data);
$name = 'mydata2.txt';
$data = 'Другая строка с данными!';
$this->zip->add_data($name, $data);
Или вы можете передать множество файлов, используя массив:
$data = array(
'mydata1.txt' => 'Строка с данными!',
'mydata2.txt' => 'Другая строка с данными!'
);
$this->zip->add_data($data);
$this->zip->download('my_backup.zip');
Если вы хотите организовать сжатые файле в поддиректории, включите путь как часть имени файла:
$name = 'personal/my_bio.txt';
$data = 'Я родился в лифте...';
$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 = 'Я родился в лифте...';
$this->zip->add_data($name, $data);
$zip_file = $this->zip->get_zip();
$this->zip->clear_data()
Класс zip кеширует ваши данные, поэтому следует перекомпилировать их перед каждым новым использованием функции. Если, к примеру, вы создаете несколько архивов, каждый с разными данными, вы должны очистить кеш между вызовами. Пример:
$name = 'my_bio.txt';
$data = 'Я родился в лифте...';
$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');