Pergunta

Eu estou trabalhando em um sistema de gerenciamento de arquivos e gostaria de incluir um sistema automatizado de versões, como numeração bates se um arquivo com o mesmo nome. Pensei em introduzir um "-v0001" entre o nome do arquivo e extensão e contando o número de versões que eles chegam.

$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)
 }

Eu estou pensando que eu iria usar um padrão regex para verificar se existe a versão.

As minhas perguntas são:

  • Quais são os potenciais problemas da utilização de um sistema de numeração assim?
  • E o que alternativas existem para lidar com nome de arquivo de versão?

Eu estou pretendendo que este é um sistema de importação em massa, então eu não quero bug o usuário para me dar nomes de arquivos únicos, se eu não tenho, e eu tenho a opção de incluir uma seleção de outro versionamento esquemas. Meu sistema tem marcas, de modo filename tem uma importância diminuída, mas eu acho que ainda há alguma importância.

Foi útil?

Solução

No passado, eu sempre apenas anexados os resultados de mktime () antes a extensão do arquivo (quando disse o nome de arquivo já existe no sistema). Não há necessidade de analisar o número da versão atual e você também terá um timestamp agradável adicionado ao nome do arquivo para que você possa dizer qual veio primeiro e quando ele foi criado. Você pode verificar o arquivo com o timestamp incluído antes de salvar, se você está preocupado alguém pode salvar o mesmo arquivo chamado ao mesmo segundo exato no servidor. Se isso realmente é uma preocupação, você provavelmente deve fazer o mesmo com o seu sistema, bem como, o número, em seguida, verifique novamente para ver se um arquivo com esse nome já existe.

O timestamp tem a vantagem de ser muito mais improvável que alguém está fazendo upload de um arquivo já nomeado com algo parecido com o número da versão, por exemplo, bob_321235678.jpg comparação com bob_1.jpg.

A queda de tudo isso é que você pode acabar com um monte de arquivos que são mais ou menos o mesmo, mas com nomes diferentes, assim você pode querer analisar esses dados periodicamente procura de arquivos não estiver em uso no sistema.

Outras dicas

abordagem Alternativa
Posso sugerir explorar um sistema de controle de versão verdadeira como a subversão como um backend transparente? Você pode usar ganchos SVN para automatizar commits e assim por diante. Talvez isso seria simples e mais robusto.

O "Autoversionamento" capítulo na subversão doc pode ser um bom ponto de partida para isso.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top