2011-02-28 24 views
0

在我的網站中,我將讓用戶上傳產品圖片,並且每個產品圖片將具有不同尺寸的不同版本。你如何建議我跟蹤所有這些圖像,以便我可以輕鬆處理插入和刪除操作?處理圖片上傳(保持跟蹤)PHP

我目前編寫的系統基本上是在上傳的數據庫行中記錄圖像數據(路徑,大小,日期等)。圖像文件名由

md5(microtime()) . $this->auth->user_id; 
// 55bedba35a57c710e73fee21106006b71 

和路徑像這樣產生的:

'./img/'.substr($file_name,0,1).'/'.substr($file_name,1,1).'/'.substr($file_name,2,1); 
// /img/5/5/b 

所以其

// /img/5/5/b/55bedba35a57c710e73fee21106006b71.jpg 

即對每個 「圖像」(原圖像)。我仍然不確定如何去記錄版本。

事情是我對完整性有點偏執,所以思考圖像被刪除,但仍然有記錄或沒有記錄的圖像困擾我。

有什麼(庫或東西),可以幫助我連接數據庫 - 文件系統的差距?

我使用CodeIgniter工作,如果這是任何幫助提前

感謝。如果我沒有任何意義,請讓我知道,嘿。

編輯

我想保存原來作爲數據庫中的BLOB然後產生變化,並把他們都在同一個文件夾中。通過這種方式,我認爲在缺少圖像的情況下重新生成所有圖像可能會更容易,並在必要時刪除文件夾以刪除所有文件。這可能會使我的數據庫大小難以忍受不?你怎麼看?

+0

根據圖像的大小,你可以將它們直接存儲在數據庫中作爲一個blob ..?這樣你只有一個存儲中心點。你的db可能會變得很快 – Ben 2011-02-28 00:29:53

回答

0

如果您打算將它們存儲到數據庫中,它確實取決於圖像的數量和大小。我已經編寫了電子商務系統,可以從各種大小的MySQL數據庫提供數千張圖像,除了系統負載之外,沒有任何問題。

在數據庫中存儲圖像的缺點是每個圖像都需要一個PHP腳本來執行,以增加數據庫服務器和Web服務器的負載。

我建議您使用散列來命名文件,如md5或sha1,並將user_id添加到它,將散列存儲到數據庫中。

$filename = md5_file($filename) . $extension; 

適用版本我會在數據庫中包含四列+您要保存任何額外的元數據的表。

例子:

image_id | parent_image_id | user_id | hash 
------------------------------------------------------- 
1  | NULL   | 1  | AAAAAAAAAAAAAAAA 
2  | 1    | 1  | BBBBBBBBBBBBBBBB 
3  | 2    | 1  | CCCCCCCCCCCCCCCC 

然後你就可以擁有多個子版本,如果你願意的話,從任何版本分支出來。

對於文件系統,爲了提高性能,您應該將文件存儲在存儲桶結構中...如果使用散列方法,您可以執行以下操作...

說文件名是 「aabbccddeeff.jpg」,則可以將文件保存到文件夾中,像這樣:

圖像/ AA/BB/CC/DD/eeff.jpg

這是如果尤爲重要你將有成千上萬的圖像文件。