2012-10-25 131 views
2

從一個項目遇到困難時組織靜態存儲大量文件。對於圖像,創建一個表格Image並且有一個記錄來計算存儲路徑。 像這樣:本地文件存儲

代碼:

$ image_id = 1665765; 
$ paddedId = str_pad ($ image_id, 20, '0 ', STR_PAD_LEFT); 
$ path = '/'. implode (DIRECTORY_SEPARATOR, str_split ($ paddedId, 2)); 

在輸出:==> webroor.upload/00/00/00/00/00/00/01/66/57 /1665765分之65。 jpg

$ image_id是需要圖片的實體表中的一個字段($ user-> image_id)。這種方法允許基於一個$ image_id指定圖像的完整路徑而無需調用基礎。當我們明顯知道文件的格式時(在這種情況下,總是.jpg),它起作用。 但有時需要用戶下載不同格式的圖像。而這種方法是不實際的,因爲必須讓精神和加入文件(圖像)表,以id文件並計算其擴展路徑。由於表格圖像可能很大(甚至在單獨的數據庫中)會降低系統性能。 請與我們分享您的食譜在存儲。也許有人有一個想法如何做得更好。

對不起,我的英語。

回答

1

有兩種方法。

首先 - 您應該優化您的架構以存儲數據庫中所有文件的完整路徑。但現有項目中有大量內容並不容易。 第二個 - 您已將所有上傳的文件轉換爲一個特定的擴展名,例如.jpg,並且您所有的麻煩都將消失。許多高負荷社交網絡使用這種解決方案。

+0

該網站可以是gif和jpg圖像。轉換爲單一格式(jpg)是不可能的。 – Miron

+0

在這種情況下,您可以將image_id字段更改爲字符串並在其中保存完整路徑。或者它也不可能? – Hast

+0

哦,也。如果image_id是唯一的,您可以爲該文件的每個擴展名嘗試file_exists,並檢測該文件夾中存在哪個擴展名。但這是最後的手段。 – Hast