Php 自动文件版本控制的陷阱?

Php 自动文件版本控制的陷阱?,php,regex,version-control,filenames,file-management,Php,Regex,Version Control,Filenames,File Management,我正在开发一个文件管理系统,并希望包括一个自动版本控制,例如如果存在同名文件。我想在文件名和扩展名之间插入一个“-v0001”,并在输入时计算版本数 $basename = pathinfo($filename, PATHINFO_BASENAME); $fname = pathinfo($filename, PATHINFO_FILENAME); while (filenameExists($basename)) { //look for existing -vnnnn (at

我正在开发一个文件管理系统,并希望包括一个自动版本控制,例如如果存在同名文件。我想在文件名和扩展名之间插入一个“-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)
 }
我想我应该使用正则表达式模式来检查版本控制是否存在

我的问题是:

  • 使用这样的编号系统有哪些潜在问题?
  • 处理文件名版本控制有哪些替代方案?

我打算这是一个大规模导入系统,所以我不想让用户在不需要的情况下给我唯一的文件名,我也可以选择包含其他版本控制方案。我的系统有标签,所以文件名的重要性降低了,但我认为仍然有一些重要性。

替代方法
我是否可以建议探索一个真正的版本控制系统,将subversion作为一个透明的后端? 您可以使用svn钩子来自动化提交等等。也许这会更简单、更健壮


该文件可能是一个很好的起点

过去,我总是在文件扩展名之前加上mktime()的结果(当系统上已经存在所述文件名时)。不需要解析当前的版本号,您还可以在文件名中添加一个很好的时间戳,这样您就可以知道哪一个是最先出现的,以及它是何时创建的。如果您担心其他人可能会在服务器上的同一秒保存同一命名文件,则可以在保存之前检查包含时间戳的文件。如果这确实是一个问题,您可能也应该对您的系统执行相同的操作,增加数字,然后再次检查是否已经存在具有该名称的文件

时间戳还有一个额外的好处,那就是,与bob_1.jpg相比,不太可能有人上传与您的版本号相似的文件,例如bob_321235678.jpg


所有这一切的一个缺点是,你可以得到一堆或多或少相同但名称不同的文件,因此,您可能希望定期分析该数据,查找系统中未使用的文件。

我忘了提到,我只是将该文件名作为指向文件系统中完全唯一的文件名的数据库指针来处理。如果我愿意,我可以使用相同的文件名,我只是觉得这会让前端用户更加困惑。我只是在对文件名进行版本控制。这种方法可能有助于文档的版本控制,但我需要将文件的所有版本显示为唯一的文件。我想我说的是版本控制的原因是不允许相同的文件名冲突,不一定要严格控制同一文档的版本。啊,好吧,我错过了你真正的目标。Sorry@Brad吉尔伯特,谢谢你的英语语法课。顺便说一句,拼写检查器并不讨厌“robuster”:)很好的解决方案。但我会使用ISO8610日期格式对其进行改进,因为它有许多优点(例如订购能力)。有关其优点的参考和简要说明,请参见,与其他标准格式相比也是如此。