CodeIgniter 2 на русском

Класс Zip Encoding (архивация)

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

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

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

$this->load->library('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 (boolean) вторым параметром. Пример:

$path = '/path/to/photo.jpg';

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

// Download the file to your desktop. Name it "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);

// Download the file to your desktop. Name it "my_backup.zip"
$this->zip->download('my_backup.zip');

По умолчанию архив zip сохранит структуру директорий пути, переданную в первом параметре. Если вы не хотите сохранять полностью этот путь, передайте FALSE (boolean) вторым параметром. Пример:

$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 с вашего сервера. Передайте функции имя, которым должен называться архив. Пример:

$this->zip->download('latest_stuff.zip'); // File will be named "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, поэтмоу нет нужды пересобирать архив при каждом использовании функций выше. Если вы хотите создать несколько массивов, вы можете очищать кеш перед вызовами. Пример:

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