Zip класс
Zip класс CodeIgniter позволяет Вам создать 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');
Справка класса
- class CI_Zip
- $compression_level = 2
Уровень сжатия.
Может варьироваться от 0 до 9, где 9 - самый высокий и 0 - без эффективного сжатия:
$this->zip->compression_level = 0;
- add_data($filepath[, $data = NULL])
Параметры: - $filepath (смешанный) – Путь файла или массив пар файл => данные
- $data (массив) – Содержимое файла (игнорируется, если $filepath массив)
Возвращаемый тип: смешанный
Добавляет данные в zip архиве. Может работать как с одним файлом так и с несколькими файлами.
При добавлении одного файла, первый параметр должен содержать имя файла, а второй должен содержать содержимое файла:
$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);
Если вы хотите, чтобы в сжатых данных были организованы подкаталоги, просто укажите путь как часть файла(ов):
$name = 'personal/my_bio.txt'; $data = 'I was born in an elevator...'; $this->zip->add_data($name, $data);
Пример выше разместит my_bio.txt файл в папке personal.
- add_dir($directory)
Параметры: - $directory (смешанный) – Строку с именем каталога или массив из нескольких каталогов
Возвращаемый тип: пустота
Позволяет добавлять каталог. Обычно этот метод является ненужным, так как вы можете разместить ваши данные в директории используя $this->zip->add_data(), но если вы хотите создать пустой каталог, вы можете сделать это:
$this->zip->add_dir('myfolder'); // Создает каталог с названием "myfolder"
- read_file($path[, $archive_filepath = FALSE])
Параметры: - $path (строка) – Путь к файлу
- $archive_filepath (смешанный) – Новые имя/путь (строка) или (булево) стоит ли поддерживать оригинальный путь
Возвращает: TRUE при успехе, FALSE при неудаче
Возвращаемый тип: булево
Позволяет сжимать файл, который уже существует где-то на сервере. Укажите путь к файлу и класс 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/ каталог.
Вы также можете указать новое имя (содержащее путь) для добавлен файла на лету:
$path = '/path/to/photo.jpg'; $new_path = '/new/path/some_photo.jpg'; $this->zip->read_file($path, $new_path); // Сохранить ZIP архив содержащий /new/path/some_photo.jpg $this->zip->download('my_archive.zip');
- read_dir($path[, $preserve_filepath = TRUE[, $root_path = NULL]])
Параметры: - $path (строка) – Путь к каталогу
- $preserve_filepath (булево) – Стоит ли поддерживать оригинальный путь
- $root_path (строка) – Часть пути исключаемая из архива каталога
Возвращает: TRUE при удаче, FALSE при неуспехе
Возвращаемый тип: булево
Позволяет сжимать каталог (и его содержимое), который уже существует на вашем сервере. Укажите путь к каталогу и класс zip рекурсивно прочитает и воссоздаст его в виде zip архива. Все файлы, содержащиеся в указанном путь будут закодированы, как и любые подкаталоги содержащиеся в нем. Пример:
$path = '/path/to/your/directory/'; $this->zip->read_dir($path); // Скачать файл на компьютер. Имя архива "my_backup.zip" $this->zip->download('my_backup.zip');
По умолчанию Zip архив разместит все каталоги, указанные в первом параметре внутри zip. Если вы хотите проигнорировать дерево предшествующих каталогов, вы можете передать значение FALSE (булево) в качестве второго параметра. Пример:
$path = '/path/to/your/directory/'; $this->zip->read_dir($path, FALSE);
Это позволит создать в Zip директорию с именем “directory”, с вложенными каталогами указанного внутри, но не будет включать в себя /path/to/your часть пути.
- archive($filepath)
Параметры: - $filepath (строка) – Путь к Zip архиву
Возвращает: TRUE при удаче, FALSE при неуспехе
Возвращаемый тип: булево
Пишет закодированный Zip файл в каталог на сервере. Предоставьте действительный путь содержащий в конце название файла. Убедитесь, что директория доступна для записи (обычно 755 - OK). Пример:
$this->zip->archive('/path/to/folder/myarchive.zip'); // Создает файл с именем myarchive.zip
- download($filename = 'backup.zip')
Параметры: - $filename (строка) – Имя файла архива
Возвращаемый тип: пустота
Служит для загрузки Zip файла с вашего сервера. Вы должны передать имя zip файла для загрузки. Пример:
$this->zip->download('latest_stuff.zip'); // File will be named "latest_stuff.zip"
Примечание
Не отображайте данные этого метода в контроллере, так как он посылает различные заголовки сервера, которые скачивают файл и файл обрабатывается как двоичный.
- get_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();
- 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"); // Read the file's contents $this->zip->download('myphotos.zip');