Подводные камни автоматического управления версиями файлов?
-
19-09-2019 - |
Вопрос
Я работаю над системой управления файлами и хотел бы включить автоматизированное управление версиями, такое как нумерация Бейтсов если файл с таким именем существует.Я подумал о том, чтобы вставить "-v0001" между именем файла и расширением и подсчитывать количество версий по мере их поступления.
$basename = pathinfo($filename, PATHINFO_BASENAME);
$fname = pathinfo($filename, PATHINFO_FILENAME);
while (filenameExists($basename)) {
//look for existing -vnnnn (at end of file name)
if (versioningExists($fname)) {
//roll number ahead, set bates number
} else {
//start bates numbering at 1
}
//insert bates version number (str_pad)
}
Я думаю, я бы использовал шаблон регулярных выражений, чтобы проверить, существует ли управление версиями.
Мои вопросы таковы:
- Каковы потенциальные проблемы при использовании подобной системы нумерации?
- И какие существуют альтернативы для работы с управлением версиями имен файлов?
Я предполагаю, что это будет система массового импорта, поэтому я не хочу заставлять пользователя давать мне уникальные имена файлов, если мне это не нужно, и у меня есть возможность включить выбор других схем управления версиями.В моей системе есть теги, поэтому filename имеет меньшую важность, но я бы подумал, что некоторая важность все еще сохраняется.
Решение
Раньше я всегда просто добавлял результаты mktime() перед расширением файла (когда указанное имя файла уже существует в системе).Нет необходимости анализировать номер текущей версии, и вы также получите красивую временную метку, добавленную к имени файла, чтобы вы могли определить, какой из них появился первым и когда он был создан.Вы можете проверить наличие файла с включенной меткой времени перед сохранением, если вы обеспокоены тем, что кто-то другой может сохранить файл с тем же именем в ту же самую секунду на сервере.Если это действительно вызывает беспокойство, вам, вероятно, следует сделать то же самое и со своей системой, увеличив число, а затем еще раз проверить, существует ли уже файл с таким именем.
Временная метка имеет дополнительное преимущество: она снижает вероятность того, что кто-то загрузит файл, имя которого уже похоже на номер вашей версии, например bob_321235678.jpg, по сравнению с bob_1.jpg.
Единственным недостатком всего этого является то, что вы можете получить кучу файлов, которые более или менее одинаковы, но с разными именами, поэтому вам может потребоваться периодически анализировать эти данные в поисках файлов, не используемых в системе.
Другие советы
Альтернативный подход
Могу ли я предложить изучить настоящую систему управления версиями, такую как subversion, в качестве прозрачного бэкэнда?Вы могли бы использовать svn-хукеры для автоматизации коммитов и так далее.Возможно, это было бы проще и надежнее.
Тот самый Глава "Автоверсия", посвященная подрывной деятельности документ может стать хорошей отправной точкой для этого.