2012-03-22 66 views
1

的目錄結構我做了一個網站...我在哪裏存儲用戶上傳的文件在不同的目錄,如
USER_ID = 1
所以
IMG/upload_docs/1/1324026061_1.txt
IMG/upload_docs/1/1324026056_1.txt

相同的方式,如果
USER_ID = 2
所以
IMG/upload_docs/2/1324026061_2.txt
IMG/upload_docs/2/1324026056_2.txt
...
ň
對於大量文件

所以,現在如果將來我是否會得到100000個用戶,然後在我的upload_docs文件夾中,我將擁有100000個文件夾。
並且對用戶上傳沒有限制,因此它可以是1000個文件,單用戶或10個文件任意數量的文件...

所以這是正確的方法是什麼? 或者如果沒有,那麼任何人都可以建議我如何將這種文件存儲在這種結構?

回答

0
img/upload_docs/1/0/10000/1324026056_2.txt 
img/upload_docs/9/7/97555/1324026056_2.txt 
img/upload_docs/2/3/23/1324026056_2.txt 
+0

你能解釋一下你的答案嗎?因爲我沒有得到這個1/0/10000和9/7/97555和2/3/23 ...那些指的是什麼? – Dev 2012-03-22 12:14:46

+0

對我感到羞恥,我認爲這很明顯。 – 2012-03-22 12:20:03

+0

嘿,請你能解釋一下我的名字分裂方式嗎? – Dev 2012-03-23 06:18:17

0

我會做的是命名圖像UUID並根據文件的名稱創建子文件夾。你可以用chunk_split很容易地做到這一點。例如,如果您創建一個文件夾,每4個字符,你會用這樣的結構,結束了:

img/upload_docs/1/1324/0260/61_1.txt 
img/upload_docs/1/1324/0260/56_1.txt 

通過存儲映像名稱1324026056_1.txt然後你可以很容易判斷它屬於或在哪裏把它拿來這裏使用chunk_split

這是一個類似的方法來git存儲對象。

作爲代碼,它可能看起來像這樣。現在

// pass filename ('123456789.txt' from db) 
function get_path_from_filename($filename) { 
    $path = 'img/upload_docs'; 
    list($filename, $ext) = explode('.', $filename); //remove extension 
    $folders = chunk_split($filename, 4, '/'); // becomes 1234/5678/9 
    // now we store it here 
    $newpath = $path.'/'.$folders.'/'.$ext; 
    return $newpath; 
} 

當你搜索並把它輸送到用戶,使用以下步驟來重新創建該文件是用一個函數的文件(基於這仍然是在存儲爲「123456789.txt」文件名D B)。

現在要交付或存儲文件,請使用get_path_from_filename

+0

這是一個有10000個文件的目錄,這似乎不是太好的解決方案。 – 2012-03-22 14:29:05

+0

而這個特定的一個不會幫助100000個用戶,lol :) – 2012-03-22 14:30:19

+0

不,它最終會成爲幾個目錄,每個目錄都有一些文件。如果它適用於存儲數千個對象的git,爲什麼它不適用於擁有多個圖像的10000個用戶? – jeremyharris 2012-03-22 15:45:12

相關問題