На днях я рассказывал, как получить список файлов, что содержит rar-архив без использования сторонних расширений или библиотек. В одном из комментариев промелькнула мысль, что в принципе, не смотря на закрытость алгоритма RAR, можно вручную создать архив без сжатия. Посидев один вечер над кодом, я представляю вашему вниманию класс для создания stored-RAR архивов.
Формат я ещё раз описывать не буду, он достаточно неплохо описан здесь или у меня в предыдущей статье. В этот раз мы просто рассмотрим, что умеет библиотека и какие у нас будут способы её расширения в будущем.
Код с комментариями вы можете получить на GitHub'е.
Посмотрим, на что способен этот класс:
Что стоит иметь ввиду:
Зачем нужна эта библиотека:
Что хотел бы сделать в будущем:
Формат я ещё раз описывать не буду, он достаточно неплохо описан здесь или у меня в предыдущей статье. В этот раз мы просто рассмотрим, что умеет библиотека и какие у нас будут способы её расширения в будущем.
Пример работы
- $rar = new store_rar; # создаём экземпляр класса
- $rar->create("archive.rar"); # создаём архив
- $rar->addFile("a.txt"); # пишем в него файл a.txt
- $rar->addDirectory("b/c"); # создаём в архиве директорию "b" с поддиректорией "c"
- $rar->addFile("d/e.txt"); # создаём директорию "d" и пишем в неё e.txt
- $rar->close(); # закрываем архив
Код с комментариями вы можете получить на GitHub'е.
А по факту?
Посмотрим, на что способен этот класс:
- Создавать «пустые» rar-архивы :)
- Создавать любую вложенность директорий одним вызовом
addDirectory
; - При создании уже существующей в архиве директории новый каталог создан не будет;
- Записывать файл в поддиректорию без предварительного её создания.
Что стоит иметь ввиду:
Если «архивируемый» файл уже добавлен в архив, в архиве будут два (и т.д.) файла с одинаковым именем;- В классе нет поддержки unicode-символов (которая, отмечу, есть в 3.х версии RAR);
- Нет функций переименования, удаления, перемещения файлов внутри архива, добавления файлов к архиву, разархивации файлов;
- Нет поддержки мультитомных архивов.
Зачем нужна эта библиотека:
- Для быстрой архивации некоторого объёма файлов с последующей отправкой их пользователю в виде одного архива;
- Как доказательство того факта, что можно заархивировать в RAR без rar.dll :)
Что хотел бы сделать в будущем:
- Поддержка операций с файлами внутри архива;
- Поддержка unicode-имён;
- Разбивка архивов на тома;
- «Архивация» с паролем — не уверен, что возможно.