2009-08-24 19 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) 
} 

我想我會用正則表達式來檢查是否存在版本。

我的問題是:

  • 什麼是使用一個編號系統這樣的潛在的問題?
  • 還有什麼替代方法來處理文件名版本?

我打算這是一個大衆進口系統,所以我不希望錯誤的用戶給我唯一的文件名,如果我不就得了,我有包括的選項其他版本控制方案的選擇。我的系統有標籤,所以文件名的重要性下降了,但我認爲還是有一定的重要性。

+0

我忘了提及我只處理文件名作爲數據庫指針指向文件系統中完全唯一的文件名。如果我願意,我可以使用相同的文件名,但我只是覺得這會讓前端用戶感到困惑。 – jjclarkson 2009-08-24 16:23:33

回答

1

在過去,我總是在文件擴展名之前(當系統上已存在文件名時)加上mktime()的結果。不需要解析當前版本號,並且您還可以在文件名中添加一個很好的時間戳,以便您可以分辨哪一個先發生,何時創建。如果您擔心其他人可能會在服務器上同一時間保存同一個命名文件,則可以在保存之前檢查包含時間戳的文件。如果這確實是一個問題,那麼您應該也可以對您的系統執行相同的操作,然後再檢查一次,看看是否存在具有該名稱的文件。

時間戳還有一個額外的好處,就是不會有人上傳已經命名類似於您的版本號的文件,例如bob_321235678.jpg與bob_1.jpg相比。

最糟糕的是你最終可能會得到一堆或多或少相同但文件名不同的文件,所以你可能需要定期分析這些數據以尋找系統中未使用的文件。

+0

好的解決方案。但我會使用ISO 8610日期格式來改進它,因爲它具有許多優點(例如訂購能力)。請參閱http://en.wikipedia.org/wiki/ISO_8601以獲取參考資料並簡要說明其優點,並與其他標準格式進行比較。 – drAlberT 2009-08-25 07:23:00

0

替代做法
我建議探索一個真正的版本控制系統顛覆爲透明後端? 你可以使用svn鉤子來自動提交等等。也許這將是簡單和更強大。

"Autoversioning" chapter on the subversion doc可能是一個很好的起點。

+0

我只是版本化文件名而已。這種方法可能對文檔的版本控制有好處,但我需要將文件的所有版本作爲唯一文件提供。我想我的意思是我的版本控制的原因是不容易相同的文件名衝突,不一定嚴格控制同一文件的版本。 – jjclarkson 2009-08-24 16:42:33

+0

好吧,我錯過了你的真正目標。對不起 – drAlberT 2009-08-24 17:23:04

+0

's/robuster /更魯棒/;' – 2009-08-24 18:38:03