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