Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: galeria zdjęć - od czego zacząć
Forum PHP.pl > Forum > PHP
japolak
Witam
mysle nad stworzeniem galerii w swoim serwisie

Założenia mam takie coś ala serwisy społecznościowe:
czyli każdy użytkownik sobie wrzuca swoje zdjęcia/ - zjęcia sa podpiete do jego profilu, czyli wchodząc w jego profil można obejrzeć dodane przez niego zdjęcia.

jak to rozwiązac od strony bazy danych i od systemu plików/

czy rozwiązanie dla systemu plików typu:
na serwerze mam katalog users/gallery/i np. folder z urzytkownikami od id 1-100, 101 - 200, itd / nastepnie folder z konkretnym id uzytkownika i tam dopiero jego zdjęcia,

a od strony myslq
tabela gallery gdzie byloby id_użyt, nazwa_zdjęcia, lokalizacja

czy może macie lepsze rozwiazanie dla tego typu problemu??
tehaha
prawie ok, tylko po co te foldery 1-100 itd, od razu dajesz folder z ID użytkownika a nazwa zdjęcia to ID zdjęcia, nazwy zdjęcia najlepiej jest zmienić bo po co Ci oryginalne nazwy poza tym musiałbyś sprawdzać czy już taka nazwa nie jest zajęta

w mysql:
- id zdjęcia
- opis
- id użytkownik / lub id galerii jeżeli użytkownik może mieć więcej galerii
- rozszerzenie / jeżeli dopuszczasz możliwość zapisu zdjęć w różnych formatach, ale w takim serwisie to chyba najlepiej wszystko przekonwertować do skompresowanego jpg

jeżeli nie wiesz jak zabrać się za pisanie klasy do skalowania zdjęcia to użyj czegoś gotowego , wpisz w google thumbnail class to znajdziesz dużo gotowców
japolak
ok.. dzieki za podpowiedź

natomiast co do

Cytat(tehaha @ 19.06.2011, 20:54:24 ) *
prawie ok, tylko po co te foldery 1-100 itd, od razu dajesz folder z ID użytkownika a nazwa zdjęcia to ID zdjęcia, nazwy zdjęcia najlepiej jest zmienić bo po co Ci oryginalne nazwy poza tym musiałbyś sprawdzać czy już taka nazwa nie jest zajęta


no to myslac do przodu.. wiem ze w tej chwili przesadnie..
no ale gdyby;)

jak by mi sie naroilo przykładowo 50 000 uzytkowników
to czy nie za duzo bylo by folderów w jednym katalogu? i czy to by w jakims sensie nie spowalnialo pracy..
gdzies kiedys czytalem o takim rozwiazaniu zeby zrobić wieksze rozbicie na foldery, ala cos w podobie co napisalem

... hmm
a tak do tego tematu jeszcze jedno pytanie...

jesli chciałbym aby uzytkownik miał swój awatar
to gdzie dodać ten awatar? łaczenie z jego wszystkimi zdjęciami. i w jakiś sposób w bazie danych zaznaczyć które zdjęcie jest awatarem?
czy moze jakieś inne standartowe rozwiązanie?



Wiem, że pytania które zadaje są w sumie banalne , bo mozna zrobić tak jak sie chce

ale chodzi mi tu o optymalne rozwiązania, aby nie wracać do problemu i drugi raz się nad nim zastanawiać
tehaha
Cytat
jak by mi sie naroilo przykładowo 50 000 uzytkowników
to czy nie za duzo bylo by folderów w jednym katalogu? i czy to by w jakims sensie nie spowalnialo pracy..
gdzies kiedys czytalem o takim rozwiazaniu zeby zrobić wieksze rozbicie na foldery, ala cos w podobie co napisalem

No ale w jaki sposób posiekanie tego na foldery po 100 ma usprawnić pracę? Szczerze mówiąc dla mnie struktura folderów to raczej kwestia porządkowa bo wątpię, żeby taki układ zwiększał jakoś wydajność, chociaż to też zależy od faktycznej liczby plików i folderów, ja bym na początku to olał. Ale przecież jak chcesz to żaden problem. Tylko jestem ciekaw czy z projektowaniem bazy danych, system cache'owania itd tak samo idziesz w przód, czy tylko wyłapałeś jakąś błachostkęsmile.gif

Co do avataru osobiście robię tak, że umieszczam plik o nazwie avatar.jpg w folderze zdjęć użytkownika czyli np. files/users/15/avatar.jpg, wtedy nie muszę wykonywać połączenia do bazy danych tylko sprawdzam czy istnieje avatar samą funkcją file_exists()

generalnie chodzi mi o to, że albo faktycznie robisz serwis pod duże obciążenie i dziesiątki tysięcy użytkowników, albo nie, bo samo kombinowanie ze strukturą folderów przy tym jak wszystko inne kompletnie leży to tylko zbędna komplikacja dla Ciebie, na początek zrób tak żeby to było wygodne w użyciu i żeby pliki były skalowane i kompresowane
japolak
Cytat(tehaha @ 19.06.2011, 21:32:04 ) *
generalnie chodzi mi o to, że albo faktycznie robisz serwis pod duże obciążenie i dziesiątki tysięcy użytkowników, albo nie, bo samo kombinowanie ze strukturą folderów przy tym jak wszystko inne kompletnie leży to tylko zbędna komplikacja dla Ciebie, na początek zrób tak żeby to było wygodne w użyciu i żeby pliki były skalowane i kompresowane



w sumie racja
prawdopodobieństwo tak duzego powodzenia w moim przypadku jest praktycznie zerowe..

no to zanim przejde do pracy mam jeszcze jedno pytanie co do tej podpowiedzi skalowania i kompresowania..

robić skalowanie za każdym razem w locie - przez php - aby rozmiary pliku bym mniejszy,
czy tylko jednorazowo przy zapisywaniu pliku i robić duplikat "miniaturki" w innym folderze?

kompresowanie?? plik jpg juz jest sam z siebie skompresowany.. -- co do zabawy w funkcje graficzne w php - to jeszcze w tym sie za bardzo nie bawiłem..
-------------
tehaha
skalowanie - oczywiście tylko i wyłącznie jednorazowo przy uploadzie pliku przez użytkownika, tym drugim to byś zamordował serwer, najlepiej zdjęcie robisz sobie w 2 wymiarach: duże i miniaturka do wyświetlania w galerii
kompresja - chodzi mi o to, że możesz ustawić sobie kompresję podczas skalowania dla jpg w zakresie 0-100, dla dużych zdjęć kompresja 80 jset ok, a dla miniaturek możesz z mniejszymi kombinować
japolak
ok.. dzieki wielkie .. troche mi to rozjaśniło postawiony przeze mnie problem
..

Przejdę teraz do częsci praktycznej .. jak napotkam na jakieś większe problemy to dopisze w tym temacie..

pozdrawiam i miłej nocki życzę..

Dzięki
by_ikar
Jeżeli stronę masz na jakimś hostingu współdzielonym, typu home, nazwa itp to liczba katalogów ma znaczenie. Już dokładnie nie pamiętam, jaka to liczba była, ale niektóre hostingi, mają limity na ilość katalogów. Tzn nie jest to pewnie nigdzie napisane, ale były sytuacje jak na forum ludzie pisali że usługodawca pisze im maile że zablokuje im serwer, ponieważ przez zbyt dużą liczbę katalogów, backup wykonuje się dłużej, czy też nie może się wykonać. I taka liczba katalogów przeszkadza jedynie podczas backupu. Tyle w kwestii katalogów wink.gif samo ich trzymanie na serwerze raczej nie wpływa na wydajność.
japolak
hej
kolejne pytanie co do tematu:)

a konkretnie albumu

aktualnie tak wyglada poziom rozwoju mojej galerii:

  1. CREATE TABLE IF NOT EXISTS `user_album` (
  2. `id_user` int(10) UNSIGNED NOT NULL,
  3. `album_id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  4. `album_name` varchar(128) COLLATE utf8_polish_ci NOT NULL,
  5. `album_desc` text COLLATE utf8_polish_ci NOT NULL,
  6. `album_thumb` int(10) UNSIGNED NOT NULL,
  7. `album_access` int(2) UNSIGNED NOT NULL,
  8. `add_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  9. PRIMARY KEY (`album_id`,`id_user`)
  10. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci AUTO_INCREMENT=1 ;


  1. CREATE TABLE IF NOT EXISTS `user_photo` (
  2. `photo_id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  3. `id_user` int(10) UNSIGNED NOT NULL,
  4. `album_id` int(10) UNSIGNED NOT NULL,
  5. `id_cat` int(10) UNSIGNED NOT NULL,
  6. `file_name` varchar(128) COLLATE utf8_polish_ci NOT NULL,
  7. `photo_name` varchar(128) COLLATE utf8_polish_ci NOT NULL,
  8. `photo_desc` text COLLATE utf8_polish_ci NOT NULL,
  9. `add_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  10. `counter` int(10) UNSIGNED NOT NULL,
  11. PRIMARY KEY (`photo_id`)
  12. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci AUTO_INCREMENT=1 ;


i teraz tak sie zastanawiam..
założenie mam takie że użytkownik bez wcześniejszego ręcznego tworzenia gallerii moze odrazu wgrywać sobie zdjęcia.
a te zdjęcia wtedy będą wyświetlane jako że są w głównej gallerii ..

i mam dylemat taki czy tą główna (domyśla) galerie rejestrować w bazie zaraz przy rejestracji użytkownika .
czy wogóle jej nie wykazywać. - a poźniej w wynikach zdjęcia które nie sa przypisane do żadnej z gallerii bedą wrzócane zapytaniem do tej głównej.
-- tylko nie wiem czy w ten sposób nie narobie sobie zbyt dużo roboty..

słucham waszych opinii.


temat juz nie aktualny..

w sumie sam się rozwiązałsmile.gif

album główny ma zawsze wartość '0'
wiec obyło sie bez większych kombinacji ..

pobieranie danych z bazy: klasa danych;
  1. public function get_photo_album($user,$album_id){
  2.  
  3. $sql="select * from user_photo where id_user ='".$user."' and album_id='".$album_id."'order by add_date_photo desc";
  4. $connect=$this->connect_bd();
  5. $result=$connect->query($sql);
  6. if (!$result){echo "blad w get photo album"; return false;}
  7. if ($result->num_rows>0)
  8. {
  9. $result=$this->result_bd_to_table($result);
  10. return $result;
  11. }
  12. }


ta funkcja działa dla każdej możliwości.


a wywoływana przez:
formatowanie wyników z bazy - klasa formatowania:
  1.  
  2. public function display_user_album($table_albums){
  3.  
  4.  
  5. if (!is_array($table_albums)) {
  6. echo "<li> Brak dostępnych kategorii </li>";
  7. return;
  8.  
  9.  
  10. }
  11. foreach ($table_albums as $row) {
  12.  
  13. ?><div class="product-photo">
  14. <p>
  15. <?php
  16. if($row['album_thumb']=='null'){echo "cos pokrecilem";}else{
  17. ?>
  18. <a href='../users/gallery.php?album=<?php echo $row['album_id'];?>'><img src='../themes/new/albums_def.png' width='100' height='100' ><br><?php echo $row['album_name'];?></a>
  19. <?php
  20.  
  21. }
  22. ?>
  23. </p>
  24. </div><?php
  25. }
  26.  
  27. //wyswietlanie linku od galerii glownej
  28. ?><div class="product-photo">
  29. <p>
  30. <a href='../users/gallery.php?album=0'><img src='../themes/new/albums_def.png' width='100' height='100' ><br>Album główny</a>
  31. </p>
  32.  
  33. </div><?php
  34.  
  35. }


zawsze wyświetla prawidłowe wartości.

plik docelowy : gallery.php ktory wyświetla zawartosc w zaleznosci od wyboru galerii
  1. class change extends user_view{
  2.  
  3.  
  4. public function display_contents (){
  5.  
  6. $get_user=new data_user();
  7. $user_real_id=$get_user->get_user_real_id($_SESSION['login']);
  8. $album_id=$_GET['album'];
  9. $get=new data_user();
  10. $table_photo=$get->get_photo_album($user_real_id['id'],$album_id);
  11.  
  12. ?><div id="contentuser"><div class="title">Album:</div><div class="post"><div class="entry">
  13. <?php
  14.  
  15.  
  16.  
  17. $show=new user_view();
  18. $show->display_photo_album($table_photo);
  19. ?>
  20.  
  21.  
  22. </div>
  23. </div></div>
  24. <?php
  25.  
  26. //zamyka display contents
  27. }
  28. //zamyka klase
  29. }
  30.  



a tak out of topic:
czy takie pisanie kodu jak ja.. jest ok.. czy to raczej sieczka? wg. was?
jackraymund
a tak zapytam, nie łatwiej by było zrobić tak?
przy w mysql przy użytkownikach id to nazwa folderu, typu
mam id 1
wchodzi do folderu, wtedy pętelka for i pokazanie wszystkich fotek
japolak
Cytat(jackraymund @ 25.06.2011, 22:31:02 ) *
a tak zapytam, nie łatwiej by było zrobić tak?
przy w mysql przy użytkownikach id to nazwa folderu, typu
mam id 1
wchodzi do folderu, wtedy pętelka for i pokazanie wszystkich fotek


niby tak..
ale w bazie przechowuje dodatkowe dane.. co do każdego pliku, każdy plik tez moze byc w innym albumie itd.
wiec jak ty widzisz tu swoją koncepcje?
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.