Gerekirse bir veritabanında görüntü yolları depolamak?

6 Cevap php

Öncelikle, ben bu ilgili many sorular aynısı olarak işaretlendi sürü vardır fark ettim.

Sonunda this one geldi.

Ve kısmen sorumu çözer rağmen o soru için kabul edilen cevap, bunun hepsi cevap vermez.

My question is, a user uploads an image. I store the path in the database and the image file in the file system. However, I make 3 copies of that image (large-, medium- and small-sized). So all in all I have 4 images - original, large, medium, small.

Öyle gibi, veritabanındaki tüm 4 yolları saklamalısınız

ID  |      original      |    large        |    medium       |    small       |
----+--------------------+-----------------+-----------------+----------------+
 1  |  /path/to/original | /path/to/large/ | /path/to/medium | /path/to/small |

or just store the original's path, and give the other 3 a naming convention, like so: car.jpg, car.jpg, large-car.jpg, medium-car.jpg, small-car.jpg?

Ben bu şekilde veritabanı üzerinde daha az ağır olacaktır, ve daha sonra, ben (yani ekstra küçük) başka bir boyut eklemek istedim ben veritabanı moditfy olmazdı ki olacağını hissediyorum.

6 Cevap

Belirli bir satırdaki tüm görüntüler aynı yerde yaşıyorsanız, ben onların temel yolu, kendi kolon (ziyade orijinal görüntünün tam yolunu her zaman re-kaynaklanan baz yolu) olması gerektiğini söyleyebilirim.

database tüm görüntüler aynı yerde yaşıyorsanız, bütün bu tabloda baz yolunu tutmayın; kodunda veya küresel bir yapılandırma tablo var.

Eğer Veritabanı aşırı çalışıyor gibi görünüyor. Nasıl yerine bu yöntem hakkında.

ImageID  | UserID  | name.. 
---------+---------+-----
1        | 495     | car454.jpg
2        | 495     | house.jpg
3        | 44      | kittysmall.jpg

Ve tek bir yerde tüm görüntüleri saklayın.

IMAGES_PATH = "/ / yol / images"

5. görüntü için, bu 5.ori.jpg veya 5.large.jpg vb olurdu ve ImageId (Otomatik Artım) tarafından görüntüleri isim

Bu şekilde kolayca ne görüntü kime görebilir ve aynı zamanda kullanıcı bu konuda endişelenmenize gerek aynı adı taşıyan farklı upload görüntüleri ve olamaz.

Emin orijinal görüntünün çeşitli boyutlarda için sağlam bir adlandırma kuralı var, bu bazı önbellek görüntüleri depolamak böylece bilinen önbellek anahtarlar oluşturarak size yardımcı olacaktır, memcache gibi, bu db ve sunucunun diskinin i / üzerindeki yükü hafifletir o

(Baz kullanıcıların adını takip, hep aynı olduğu için) bilgileri yeniden eğer genelleme, ben söyleyebilirim, bu veritabanında tutmayın. Daha sonra, her ne sebeple görüntüleri saklamak dizini değiştirmek istiyorsanız, sorun olurdu.

Belirli yolları yolları için sabitleri ve sonra sadece uygun dizinleri ve referans veritabanı sadece dosya adları farklı büyüklükteki görüntüleri saklamak neden dosya adları dışında tutarlı iseniz.

Burada ana prensip veritabanında ve kodu, yinelenen bilgiler kaçınmaktır. Veritabanı için daha yüksek normal formu ulaşmak ve kod için size KURU (tekrar edin etmeyin) ulaşmak.

Eğer yapı gibi bir şey olduğunu varsayalım

/ Home / kullanıcı / site / images / orijinal /

/ Home / kullanıcı / site / images / / küçük

/ Home / kullanıcı / site / images / orta /

/ Home / kullanıcı / site / images / büyük /

Eğer bu bilgi için sabitleri kullanabilirsiniz. örneğin

PATH_ORIGINAL = / Home / kullanıcı / site / images / orijinal /

PATH_SMALL = / Home / kullanıcı / site / images / / küçük

PATH_MEDIUM = / Home / kullanıcı / site / images / orta /

PATH_LARGE = / Home / kullanıcı / site / images / büyük /

Sonra kod gibi bir şey yapabileceğini

smallcar = PATH_TO_SMALL. car.jpg;

Ya da sadece görüntüleri yükleme için ne varsa sorgu çıktı içeride uygun sabit değişken eklemek.

Yararı dizin yapılarını çimdik ya da sunucular arasında kodu taşımak yerine, eğilimli daha sorunlu ve hata olabilir veritabanı kayıtları bir bütün sıyrılmış, güncellemek gerekirse yollarını değiştirmek için bir yer olması.

Birisi 'araba adlı bir dosya yükler eğer kaynak resim üzerine değil emin olmak için: (.. / üretilen / örneğin) küçük bir çimdik gibi, farklı bir yolu oluşturulan minik, vb yerleştirmek için cazip olurdu -large.jpg 'vs