2009-08-24 14 views
0

私はファイル管理システムに取り組んでおり、同じ名前のファイルが存在する場合は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) 
} 

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

私の質問は以下のとおりです。

  • 次のようにナンバリングシステムを使用しての潜在的な問題は何ですか?
  • ファイル名のバージョン管理にはどのような方法がありますか?

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

+0

私は、ファイルシステム内の完全に一意のファイル名へのデータベースポインタとしてのファイル名のみを扱っていることを忘れていました。私が望むならば、私は同じファイル名を使うことができました。それはフロントエンドユーザーにとってもっと混乱していると感じています。 – jjclarkson

答えて

1

これまでは、ファイル拡張子の前にmktime()の結果を書き留めていました(ファイル名が既にシステムに存在する場合)。現在のバージョン番号を解析する必要はなく、ファイル名にタイムスタンプが追加されているので、どのファイルが最初に来たのか、作成されたのかを知ることができます。他の誰かが同じ名前のファイルをサーバー上の同じ正確な秒で保存する可能性がある場合は、保存する前にタイムスタンプ付きのファイルをチェックすることができます。それが本当に懸念されるのであれば、あなたのシステムでも数字を上げて同じことをやって、その名前のファイルがすでに存在するかどうか再度確認してください。

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

これまでの落とし穴の1つは、多かれ少なかれ同じ名前だが、システム内で使用されていないファイルを定期的に探したい場合があります。

+0

良い解決策。しかし、ISO 8610の日付フォーマットを使用して改良していきます。これには、数多くの利点(注文能力など)があります。他の標準フォーマットと比較して、その利点の説明と簡単な説明については、http://en.wikipedia.org/wiki/ISO_8601を参照してください。 – drAlberT

0


は、私は透明のバックエンドとしてSubversionの真バージョン管理システムを模索し提案することができる代替的なアプローチ? svnフックを使用してコミットなどを自動化することができます。たぶん、これは簡単で頑丈なものになるでしょう。

"Autoversioning" chapter on the subversion docは、そのための良い出発点です。

+0

私はちょうどファイル名をバージョン管理しています。このアプローチは、ドキュメントのバージョン管理には効果的かもしれませんが、すべてのバージョンのファイルを一意のファイルとして提示する必要があります。私が言っていることは、バージョン管理の理由は、同じファイル名の衝突を邪魔にならず、同じドキュメントのバージョンを厳密に管理する必要がないということです。 – jjclarkson

+0

ああ、私はあなたの本当の目標を逃した。申し訳ありません – drAlberT

+0

's/robuster/robust /; –

関連する問題