2009-08-24 5 views
0

Je travaille sur un système de gestion de fichiers et j'aimerais inclure un versionnement automatisé tel que bates numbering si un fichier portant le même nom existe. Je pensais d'insérer un « -v0001 » entre le nom de fichier et l'extension et en comptant le nombre de versions comme ils entrent en jeu.Pièges de la gestion automatisée des versions de fichiers?

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

Je pense que je voudrais utiliser un modèle de regex pour vérifier si le versionnage existe.

Mes questions sont les suivantes:

  • Quels sont les problèmes potentiels de l'utilisation d'un système de numérotation comme celui-ci?
  • Et quelles sont les alternatives pour traiter le versionnement des noms de fichiers?

Je proposais l'existence de ce système d'importation de masse, donc je ne veux pas bug à l'utilisateur de me donner des noms de fichiers uniques si je n'ai pas, et j'ai la possibilité d'inclure une sélection d'autres schémas de versioning. Mon système a des balises, donc le nom de fichier a une importance moindre, mais je pense qu'il y a encore de l'importance.

+0

J'ai oublié de mentionner que je traite seulement le nom de fichier comme un pointeur de base de données vers un nom de fichier complètement unique dans le système de fichiers. Je pourrais utiliser des noms de fichiers identiques si je le voulais, je pense juste que cela serait plus déroutant pour l'utilisateur final. – jjclarkson

Répondre

1

Dans le passé, j'ai toujours juste collé sur les résultats de mktime() avant l'extension de fichier (quand ce nom de fichier existe déjà sur le système). Pas besoin d'analyser pour le numéro de version actuel et vous obtenez également un horodatage gentil ajouté au nom du fichier afin que vous puissiez dire lequel est venu en premier et quand il a été créé. Vous pouvez vérifier le fichier avec l'horodatage inclus avant d'enregistrer si vous craignez que quelqu'un d'autre puisse sauvegarder le même fichier nommé à la même seconde sur le serveur. Si c'est vraiment un problème, vous devriez probablement faire la même chose avec votre système, augmenter le nombre, puis vérifier à nouveau si un fichier portant ce nom existe déjà.

L'horodatage a l'avantage supplémentaire d'être beaucoup plus improbable que quelqu'un télécharge un fichier déjà nommé avec quelque chose de similaire à votre numéro de version, par exemple, bob_321235678.jpg par rapport à bob_1.jpg. Le seul inconvénient à tout cela est que vous pouvez vous retrouver avec un tas de fichiers qui sont plus ou moins les mêmes mais avec des noms différents, donc vous pouvez vouloir analyser périodiquement ces données à la recherche de fichiers qui ne sont pas utilisés dans le système .

+0

Bonne solution.Mais je l'améliorerais en utilisant un format de date ISO 8610, car il a un certain nombre d'avantages (tels que la capacité de commande). Voir http://en.wikipedia.org/wiki/ISO_8601 pour une référence et une brève description de ses avantages, également comparés avec d'autres formats standards. – drAlberT

0

approche alternative
Je vous suggère d'explorer un véritable système de versionnage subversion en arrière-plan transparent? Vous pouvez utiliser svn hooks pour automatiser les validations, etc. Peut-être que ce serait simple et plus robuste. Le "Autoversioning" chapter on the subversion doc peut être un bon point de départ pour cela.

+0

Je ne fais que versionner le nom de fichier seulement. Cette approche peut être utile pour le contrôle des versions de documents, mais je dois présenter toutes les versions du fichier comme des fichiers uniques. Je suppose que ce que je dis est que ma raison pour le versioning est d'interdire les collisions de noms de fichiers identiques discrètement, pas nécessairement garder un contrôle strict des versions du même document. – jjclarkson

+0

Ah ok, j'ai raté ton vrai but. Désolé – drAlberT

+0

's/robuster/plus robuste /;' –

Questions connexes