0

私はファイル管理システムに取り組んでおり、同じ名前のファイルが存在する場合、通し番号などの自動バージョン管理を含めたいと考えています。ファイル名と拡張子の間に「-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)
 }

バージョン管理が存在するかどうかを確認するために正規表現パターンを使用すると考えています。

私の質問は次のとおりです。

  • このような番号付けシステムを使用すると、どのような問題が発生する可能性がありますか?
  • また、ファイル名のバージョン管理に対処するための代替手段は何ですか?

私はこれを一括インポート システムにするつもりです。そのため、必要がない場合にユーザーに一意のファイル名を与えるようにバグを報告したくありません。また、他のバージョン管理スキームの選択を含めるオプションがあります。私のシステムにはタグがあるため、ファイル名の重要性は低下していますが、まだ重要性はあると思います。

4

2 に答える 2

1

これまで、私は常にファイル拡張子の前にmktime()の結果に取り組んできました(そのファイル名がシステムにすでに存在する場合)。現在のバージョン番号を解析する必要はありません。また、ファイル名に素敵なタイムスタンプが追加されるので、どちらが最初に来たのか、いつ作成されたのかを知ることができます。他の誰かが同じ名前のファイルを同じ正確な秒でサーバーに保存するのではないかと心配している場合は、保存する前にタイムスタンプが含まれているファイルを確認できます。それが本当に懸念される場合は、おそらくシステムでも同じことを行い、番号を増やしてから、その名前のファイルがすでに存在するかどうかをもう一度確認する必要があります。

タイムスタンプには、bob_1.jpgと比較してbob_321235678.jpgなど、バージョン番号に類似した名前のファイルを誰かがアップロードする可能性がはるかに低いという追加の利点があります。

これらすべての欠点の1つは、ほぼ同じで名前が異なるファイルが大量に発生する可能性があるため、そのデータを定期的に解析して、システムで使用されていないファイルを探すことです。

于 2009-08-24T18:35:54.180 に答える
0

別のアプローチ
透過的なバックエンドとしての真のバージョン管理システムをサブバージョンとして検討することをお勧めしますか? svn フックを使用して、コミットなどを自動化できます。たぶん、これはシンプルでより堅牢です。

Subversion docの「Autoversioning」の章は、そのための良い出発点かもしれません。

于 2009-08-24T16:16:53.070 に答える