Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySql] Tysiące fotografi - jak je przechowywać ?
Forum PHP.pl > Forum > Przedszkole
mariuszg
witam

Strona z ogłoszeniami i do każdego ogłoszenia do 10 fotek.
Jak łatwo policzyć będzie tego mnóstwo.

Jak przechowywać te fotki ?

W bazie ścieżki do plików.

A jak przechowywać fotki ?
Wszystkie w jednym katalogu - to chyba nie najlepsze rozwiązanie.
Jak zabrać sie za skrypt który będzie to w sensowny sposób rozmieszczał ?
Nie wiem czy w jednym katalogu po 100 katalogów a w nim po 1000 fotek - czy inne ilości lub rozwiązania.


Proszę o pomoc.
Wieviór
Tworzysz tabelę z obrazkami i z katalogami.

Przy próbie dodania pliku wyczytujesz ostatni katalog (według id) i dajesz skrypt, który sprawdzi ile jest w tym katalogu plików, jeśli jest powiedzmy powyżej 500 to skrypt tworzy nowy, zapisuje go do tabeli z katalogami i tam wrzuca ten obrazek. Nazwy katalogów najlepiej jakby były losowe jakoś.
mariuszg
dzięki za odpowiedz


Czy 500 plików w katalogu to optymalne rozwiązanie ?

przy 30 000 fotek byłoby 60 katalogów

pozdrawiam
l0co
Jeśli będziesz hostował na Ext3 w Linuxie z jądrem od wersji 2.6 to w sumie nie ma różnicy i możesz wszystko trzymać w jednym katalogu. Na Windzie pewnie się w końcu wysypie, jak wszystko...
Wieviór
Tak na prawdę nie ma to znaczenia ile będziesz tych plików gdzie trzymać. Podałem przykładowo 500, myślę że to optymalna liczba ;]
viraptor
Cytat(l0co @ 11.09.2007, 13:14:08 ) *
Jeśli będziesz hostował na Ext3 w Linuxie z jądrem od wersji 2.6 to w sumie nie ma różnicy

Około 5-8k plików w kat. zacznie zwalniać bez indeksowania.
Na pewno w bazie ścieżki do oryginałów obrazków. A jak dzielić?
Ustawić jakiś max i dzielić last_insert_id z tablicy ścieżek przez max - wynik to nazwa katalogu - ładnie się rozłoży i rozwiązanie proste. Albo inne rozwiązanie - ale tu nie ma co kombinować smile.gif
erix
Cytat
Na Windzie pewnie się w końcu wysypie, jak wszystko...

Chyba na FAT tongue.gif

Na NTFS-ie z powodzeniem trzymam ponad 15k plików w jednym katalogów i żadnych problemów nie ma. Choć będzie to pewna różnica w przypadku wielkości plików, bo trzeba przecież wziąć pod uwagę przechowywanie w MFT.

To tak było a'propos windy.

Cytat
Ustawić jakiś max i dzielić last_insert_id z tablicy ścieżek przez max - wynik to nazwa katalogu

No, do głowy od razu przychodzi mi rozwiązanie, typu: IDOgłoszenia_numerFotki - 1_12.jpg.

Nawet nie trzeba by było w bazie ścieżek trzymać; skoro to fotki, to w 95% przypadków wystarczyłby JPG.
templar
Najlepiej przy uploadowaniu fotografii użyć funkcji md_file().

Generuje ona hash md5 z zawartości pliku. Teraz możesz uploadować plik do danego katalogu, nadajesz mu nazwę wygenerowanego_hashu_md5.jpg/gif/itp i następnie zapisujesz do bazy hash danego zdjęcia przy danym rekordzie.

Pozdrawiam.
mariuszg
skoro nie jest to istotne - to jak dla mnie to wszystkie w jednym katalogu



Cytat(erix @ 12.09.2007, 09:09:11 ) *
Chyba na FAT tongue.gif

Na NTFS-ie z powodzeniem trzymam ponad 15k plików w jednym katalogów i żadnych problemów nie ma. Choć będzie to pewna różnica w przypadku wielkości plików, bo trzeba przecież wziąć pod uwagę przechowywanie w MFT.

To tak było a'propos windy.
No, do głowy od razu przychodzi mi rozwiązanie, typu: IDOgłoszenia_numerFotki - 1_12.jpg.

Nawet nie trzeba by było w bazie ścieżek trzymać; skoro to fotki, to w 95% przypadków wystarczyłby JPG.



15k nie kumam tego, (w katalogu z fotkami 15k jedna fotka ma 60 KB )
erix
Cytat
15k nie kumam tego,

Skrót myślowy: 15 000; było bez -B, więc chodziło mi o ilość.
mariuszg
A co powiecie o tym kodzie ?

fotki będą w folderach 1,2,3,itd

jak w folderze jest więcej niż 5(przykład do testów) to tworzy nowy folder, a jak w którymś jest mniej to w nim zapisuje

w $ile_katalogow_max zrobiłem 10 dla testów a myślę o 1000 - powinno wystarczyć tym bardziej że stare fotki będą na bieżąco usuwane.

Tylko nie wiem czy aby to nie zamuli jak będzie 500 folderów po np 15000 fotek

Kod wystarczy skopiować i wkleić działa.

  1. <?
  2. $katalog = 1;
  3. $ile_plikow_max = 5;
  4. $ile_katalogow_max = 10;
  5.  
  6. while ($test < $ile_katalogow_max ) {
  7. $i = 0;
  8. if (is_dir('./'.$katalog)) {
  9.  echo "katalog $katalog istnieje";
  10. $sciezka2 = $katalog;
  11. $katalog2 = opendir($sciezka2);
  12. while ($plik = readdir($katalog2)) {
  13. if (eregi(".$",$plik)) {
  14.  $ile = $i;
  15. $i++;
  16. }
  17. }
  18.  closedir($katalog2);
  19.  echo " - jest w nim: $i plikow ";
  20.  
  21. if ($ile < $ile_plikow_max){
  22. $zapis_w = $sciezka2;
  23. $test = $ile_katalogow_max;
  24.  }  
  25. }
  26.  else {
  27. echo "brak katalogu $katalog";
  28.  
  29. mkdir($katalog);
  30. $zapis_w =$katalog;
  31. $test = $ile_katalogow_max;
  32. }
  33. echo "<br>";
  34. $katalog ++;  
  35. $test ++;
  36. }
  37. echo "<br> zapis do pliku "; 
  38. echo $zapis_w;
  39. ?>
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.