我正在开发一个文件管理系统,如果存在同名文件,我希望包含bates numbering等自动版本控制。我想在文件名和扩展名之间插入一个“-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)
}
我想我会使用正则表达式来检查版本控制是否存在。
我的问题是:
我打算将它作为一个大规模导入系统,所以如果我不需要,我不想让用户给我一个独特的文件名,我可以选择包含其他选择版本计划。我的系统有标签,所以文件名的重要性降低了,但我认为还有一些重要性。
答案 0 :(得分:1)
在过去,我总是在文件扩展名之前添加mktime()的结果(当系统上已存在所述文件名时)。无需解析当前版本号,您还可以在文件名中添加一个漂亮的时间戳,这样您就可以知道哪一个首先出现以及何时创建。如果您担心其他人可能会在服务器上以相同的秒数保存相同的命名文件,则可以在保存之前检查包含时间戳的文件。如果这确实是一个问题,您可能也应该对您的系统执行相同的操作,然后再查看数字,然后再次检查以查看是否已存在具有该名称的文件。
时间戳的另一个好处是,有人上传一个已经用类似于您的版本号命名的文件更不可能,例如bob_321235678.jpg与bob_1.jpg相比。
所有这一切的一个缺点是你最终会得到一堆或多或少相同但名称不同的文件,所以你可能想要定期解析这些数据,寻找系统中没有使用的文件。
答案 1 :(得分:0)
替代方法
我是否可以建议将真正的版本控制系统作为subversion作为透明后端?
您可以使用svn钩子来自动提交等等。也许这会简单而且更健壮。
"Autoversioning" chapter on the subversion doc可能是一个很好的起点。