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

CodeIgniter User Guide Version 2.1.0


Класс 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

Яндекс.Метрика