Надстройка над консольным RAR на PHP5
нужно написать схему инкрементального архивирования с использованием
консольной версии rar и с возможностью удаления промежуточных глав. И
возможностью восстановления файлов на дату любой главы.
написать нужно на php5.
Как это реализовать:
как узнать все файлы нужные для определённого чаптера?
запрос к базе данных в котором нужная ревизия файла находится между первой и последней ревизией этого файла.
Каждый раз мы создаём новую БД во временном файле и все новые создаваемые или файлы для изменений во временных файлах. и только после того как все изменения внесены успешно мы даём временным файлам нормальные имена затирая при необходимости старые файлы.
колонки:
name - полное имя файла
modify_date - дата и время последнего изменения
size - размер
first_rev - ревизия, в которой файл появился в первый раз
last_rev - ревизия, в которой файл появился в последний раз
скрипт должен рабоать так:
добавить главу:
ibackup a имя_архива имя_папки
модифицировать главу:
ibackup m[=номер] имя_архива имя_папки
удалить главу:
ibackup d[=номер] имя_архива имя_папки
извлечь из главы:
ibackup e[=номер] имя_архива [имя_папки]
При удалении промежуточных глав мы файлы, которые были добавлены в этой главе переносим в следующую, если, конечно, они должны там быть.
У ключей a и m должна быть необязательная опция, которая указывает силу сжатия. Опция аналогична по синтаксису используемой в rar. По умолчанию используется самое быстрое сжатие.
Аналогично мы используем необязательную опцию -r=no, которая означает отсутствие использования рекурсии.
При создании новой главы удобно использовать файл со списком файлов, которые не нужно включать в архив, который подсовывается рару.
ПРимеры использования:
мы создаём первую главу:
ibackup a first /opt
Создаются файлы:
first.sq3
first.0000.rar
Если через день запустим:
ibackup a first /opt
Получим:
first.sq3
first.0000.rar
first.0001.rar
Если через день запустим:
ibackup a first /opt
Получим:
first.sq3
first.0000.rar
first.0001.rar
first.0002.rar
запустим:
ibackup d=1 first
Получим:
first.sq3
first.0000.rar
first.0002.rar
Файлы, которые были в ревизии 1 и в ревизии 2 все перешли в ревизию 2.
Для вопросов используйте аську: 113035027