2012-02-13 9 views
5

Buduję witrynę i właśnie zacząłem zajmować się tworzeniem zaplecza.Jak przechowywać pliki obrazów w zapleczu witryny?

Celem mojej witryny będzie wyświetlanie zdjęć odwiedzającym. Dla celów programistycznych chciałbym najpierw przetestować wszystko przed uruchomieniem.

Chciałbym wiedzieć, jaki jest najlepszy sposób przechowywania tych obrazów. Właśnie skończyłem konfigurować mój serwer Wamp i dodałem nowy db z phpMyAdmin. Odkryłem, że mogę przechowywać każdy obraz bezpośrednio w bazie danych mySQL jako typ danych BLOB. Ale czy to najlepsza droga?

Dziękujemy!

Odpowiedz

7

To na pewno nie jest droga. Będziesz wtedy musiał zachować blob w pamięci w PHP przed wysłaniem go do przeglądarki.

Lepszym rozwiązaniem byłoby przechowywanie obrazów jako plików w systemie plików i przechowywanie nazwy pliku w bazie danych. w ten sposób możesz odciążyć cały obraz serwujący na serwer sieciowy i nigdy nie angażować PHP w żądania HTTP dotyczące pliku.

5

przechowywania plików do bazy danych ma dwie główne zalety:

  1. bezpieczeństwo transakcji. Jeśli użytkownik zmieni swój profil (zdjęcie & data urodzenia), oba zostaną zapisane lub nie zostaną zapisane w przypadku wycofania/błędu.

  2. Tylko jeden punkt zapasowy. Nie zapomnisz zrobić kopii zapasowej katalogu zawierającego awatary użytkowników.

Jednak ze względu na wiele pułapek, nie polecam, zwłaszcza nie za pomocą PHP & MySQL. MySQL nie obsługuje przesyłania strumieniowego, więc w przypadku dużego pliku, zużyjesz cały RAM.

System plików jest niewątpliwie najszybszy i najbardziej naturalny sposób. Ma najmniejszy narzut i jest najmniej głodny zasobów.

Czytaj:

Storing a file in a database as opposed to the file system?

Storing Documents as Blobs in a Database - Any disadvantages?

0

Można przechowywać je w DB następnie łatwo manipulować obraz. Na przykład można pobrać oryginalny obraz z bazy danych i utworzyć kilka obrazów pamięci podręcznej (na dysku) o różnych rozmiarach (przy użyciu obrazu) i wyświetlić je na stronie internetowej. Jeśli używasz DB, powinieneś używać leniwego ładowania podczas robienia zdjęć (ładuj zawartość tylko wtedy, gdy jej potrzebujesz). W przeciwnym razie mysql zawiesza twój serwer. :)

Możesz utworzyć katalog /cache /pictures/$id_$width_$height.jpg i przechowywać je tam. I tworzenie nowego obrazu tylko wtedy, gdy nie znaleziono $ id_ $ width_ $ height.

0

Ja osobiście nie poleciłbym przechowywania plików w samej bazie danych. Zapisałbym odniesienia do lokalizacji plików, aby w razie potrzeby można było skalować je w przyszłości za pomocą lusterek itp.

Powiązane problemy