parser

Класс для работы с архивами

Автор: [06 марта 2007]
Версия: 0.1
Тэги: Архивация

В один день мне стало неудобно использовать ^file::cgi[…] для работы с архивами и я написал класс, помогающий мне работать с ними.

Класс поддерживает архиваторы tar (+ компрессоры: gzip и bzip2), zip и rar. Класс используется статически, т.е. нет необходимости в создании объектов с помощью конструкторов.

Домашний каталог и корень.

По умолчанию домашним каталогом для класса считается каталог, в котором размещен или будет размещен архив. Домашний каталог используется для работы с содержанием архива при действиях: создание и разархивирование.
При указании не полного пути к файлу/каталогу на ресурсе, поиск следующего файла/каталога будет относительно домашнего каталога.

«Корень» — корень веб-пространства ($request:document-root).

Примеры

В каталоге, из которого запущен скрипт Парсера, будет создан архив, содержащий файл из этого же каталога:

^Archive:create[db_dump.zip;db_dump-${dtNow.year}${dtNow.month}${dtNow.day}.sql]

Архив, расположенный в корне веб пространства, будет разархивирован в каталог texts, находящийся на 2 уровня выше относительно домашнего каталога (в данном случае он равен корню):

^Archive:extract[/my_texts.rar;../../texts]

Метод init — инициализация статистического класса

^Archive:init[
	$.SCRIPT_PATH[путь к скрипту]
	$.DEBUG_OBJECT[объект debug-класса]
]

$.SCRIPT_PATH — путь к консольному скрипту (archive.sh — BASH / archive.bat — Win32) [string]
$.DEBUG_OBJECT — объект debug-класса, совместимый с классом Debug (P3 XML Debugger) [object]
Примечание: при повторной инициализации класса, в случае, если не указаны какие-то опции, используются значения предыдущей инициализации, если же таковой нет, то используются значения по умолчанию.
Примечание: работоспособность файла archive.bat под Win32 не проверялась.

Метод create — создание архива

^Archive:create[имя файла;содержание]
^Archive:create[имя файла;содержание;архиватор]
^Archive:create[имя файла;содержание;архиватор;компрессор]

имя файла — имя файла с путем [string]
содержание — имя архивируемого файла с путем или таблица (объект класса table) с одним столбцом path, содержащим архивируемые имена файлов и имена каталогов с путем (см. также «Домашний каталог и корень») [string|table]
архиватор — имя архиватора [string]
компрессор — имя компрессора [string]
Примечание: при указании параметров «архиватор» и «компрессор», не зависимо от того, какое расширение имеет файл, будут использованы указанные программы (поддерживаемые классом).

Метод extract — разархивирование архива

^Archive:extract[имя файла]
^Archive:extract[имя файла;путь]
^Archive:extract[имя файла;путь;архиватор;компрессор]

Разархивирует архив в домашний каталог, либо в указанный каталог.

имя файла — имя файла с путем [string]
путь — путь к каталогу для разархивирования (см. также «Домашний каталог и корень») [string]
архиватор — имя архиватора [string]
компрессор — имя компрессора [string]
Примечание: при указании параметров «архиватор» и «компрессор», не зависимо от того, какое расширение имеет файл, будут использованы указанные программы (поддерживаемые классом).

Метод list — получение содержимого архива

^Archive:list[имя файла]

Возвращает таблицу (объект системного класса table) с одним столбцом path, содержащим имена файлов и каталогов данного архива.

Поля.

SCRIPT_PATH — имя файла консольного скрипта [string]
ARCHIVER — имя архиватора [string]
COMPRESSOR — имя компрессора [string]
Примечание: значения ARCHIVER и COMPRESSOR можно получить лишь после того, как произойдет работа с архивом (создание, разархивирование и т.д.).

Пример использования.

Предположим, нам нужен метод, который при указании ссылки на архив, находящийся на другом ресурсе, скачивал файл, сохранял его во временный каталог и разархивировал в нужный нам каталог на сервере.

@extractWebArchive[strURL;strTmpDir;strDirTo][sTmpDir;fArchive]
^if(!def $strURL){
	^throw[CLASS_NAME.spec;^$strURL;param not specified]
}

^if(def $strTmpDir){
	$sTmpDir[$strTmpDir]
}{
	$sTmpDir[/../data/tmp]
}

^if(^strURL.left(7) ne "http://"){
	^throw[CLASS_NAME.url.type;^$strURL;unknown url type]
}

$fArchive[^file::load[binary;$strURL]]
^fArchive.save[binary;$sTmpDir]

^Archive:extract[$sTmpDir/$fArchive.name;$strDirTo]

$result[]
#end @extractWebArchive[]
Скачать:

Archive-0.1a.tar.gz (20.03.2007  7,4 КБ)
Архив класса для работы с архивами

bLib-0.1.tar.gz (20.03.2007  1,1 КБ)
Архив дополнительного класса, необходимого для работы