簡體   English   中英

PHP我應該將圖像路徑存儲在數據庫中嗎?

[英]PHP Should I store image paths in a database?

我將有一個包含許多公司的網站,每個公司都可以上傳他們的徽標。 為每個注冊的公司創建一個文件夾是個好主意,所以它會是
公司/ user1 / logo.jpg公司/ user2 / logo.jpg只是將每個人存儲在一個文件夾中,這樣我不需要路徑來引用圖像?

或者我應該將它們存儲在像company_logos / gaegha724252.jpg這樣的文件夾中,它們都是隨機文件名,路徑是否會存儲在與該公司相關的數據庫中?

有哪些優點和缺點?

謝謝!

使用文件夾進行組織

優點 :對於在后端擺弄系統的人來說,它們在邏輯上是清晰的 - 這就是真的。

缺點 :當您刪除公司等時,“更難”清理並且您必須確保沒有任何目錄名稱重疊,通常更多的工作從開始。

在一個文件夾中使用圖像

優點從技術上講,清理起來要容易一些,而不是那么多工作。

缺點您必須至少編寫一個非常基本的碰撞檢測算法和一個非常基本的“隨機名稱生成器”。

使用數據庫存儲圖像

警告:在這個論點中已經失去了許多生命!

優點 :參照完整性,備份/恢復更簡單,分類

缺點 :充滿陷阱,可能更慢,更先進的存儲/檢索技術,潛在的性能問題和網絡請求的增加。 此外,大多數廉價的托管服務提供商的數據庫太可怕了,這是一個好主意。

強烈建議只使用散列文件名並將其(文件名)存儲在數據庫中,然后將圖像存儲在磁盤上的文件夾(或許多文件夾)中。 從長遠來看,這應該會更容易,並且總體上表現更好而不會變得太復雜。

我會更進一步:在將每個文件存儲到文件系統之前計算每個文件的MD5總和。 您可以使用前兩個字符作為第一級的目錄名,接下來的兩個字符作為第二級的目錄:

vv 1st level
61f57fe906dffc16597b7e461e5fce6d.jpg
  ^^ 2nd level

由於散列算法具有相同的分布,這將在文件夾之間平均分配您的文件(這個想法來自Squid如何組織它的文件緩存)。 服務器應該像這樣返回URL(例如,沒有關於目錄的概念):

http://server.com/images/61f57fe906dffc16597b7e461e5fce6d.jpg

你可以應用mod_rewrite來實際重寫這個url:

/storage/images/61/f5/7fe906dffc16597b7e461e5fce6d.jpg

這也將增加一定程度的匿名性並隱藏真實的圖像名稱。 此外,如果您的客戶打算上傳相同的內容,它將最終在同一個文件中,這將節省您的磁盤空間。 從一個客戶端刪除文件時要小心:它也可能被其他人使用!

將它們存儲為“company_logos / 125.jpg”,其中125是唯一ID(數據庫中的主鍵)。

根據您期望的公司數量,為每家公司創建一個文件夾很快就會變得荒謬。 此外,從磁盤讀取文件夾結構比從數據庫讀取要慢得多。

您可以將圖像位置存儲在數據庫中,也可以使用ID解決方案。 如果需要,您還可以使用“blob”類型將圖像本身存儲在數據庫中。 雖然其他問題已經解決了這個問題: 在DB中存儲圖像 - 是也可以?

我認為最好將圖像名稱存儲在數據庫中,或使用ID方法。

如果它只是幾百條左右的記錄,我就不會在數據庫外存儲圖片了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM