Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php] upload zdjęc - te same nazwy, fotki się nadgrywają gdy ta sama nazwa
grzegorz_g
post
Post #1





Grupa: Zarejestrowani
Postów: 259
Pomógł: 0
Dołączył: 26.10.2004

Ostrzeżenie: (0%)
-----


proszę o podpowiedź jak rozwiązać taki problem:

mam komis samochodowy i chciałbym aby user dodawał zdjęcia swojego samochodu . Do uploadu używam takiego czegoś:

  1. <?php
  2.  
  3.  // upolad zdjęć
  4. foreach ($_FILES[&#092;"foto\"][\"error\"] as $key => $error) {
  5.  if ($error == UPLOAD_ERR_OK) {
  6.  $tmp_name = $_FILES[&#092;"foto\"][\"tmp_name\"][$key];
  7. $name = $_FILES[&#092;"foto\"][\"name\"][$key];
  8.  $name= strtr($name, 'ążśźęćńół', 'azszecnol');
  9.  move_uploaded_file($tmp_name, &#092;"foto/$name\");
  10.  $array[] = $name;
  11.  
  12. resizeImage(&#092;"foto/$name\", 60, 60, \"foto/mini_\".$name, 75);
  13. resizeImage(&#092;"foto/$name\", 320, 280, \"foto/ok_\".$name, 75);
  14. unlink(&#092;"foto/$name\");
  15. }
  16. }
  17.  
  18. ?>


problem polega na tym iż gdy jeden uzer wprowadzi fotkę o nazwie auto.jpg a później inny dla innego samochodu też wprowadzi fotkę "auto.jpg" nadgra się.

Jak wybrnąć z tego problemu.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
mario
post
Post #2





Grupa: Zarejestrowani
Postów: 186
Pomógł: 0
Dołączył: 23.09.2003
Skąd: Siemianowice Śląskie

Ostrzeżenie: (0%)
-----


ja to rozwiązałem w prosty sposób, wyciagam rozszerzenie uploadowanego pliku, losuję ciąg znaków i zapisuję pod nową losową nazwą:

  1. <?php
  2. $ext = pathinfo ($zdjecie_wstaw_name);
  3. $ext = $ext[&#092;"extension\"];
  4.  
  5. If ($ext==&#092;"gif\" || $ext==\"GIF\" || $ext==\"jpg\" || $ext==\"JPG\" || $ext==\"jpeg\" || $ext==\"JPEG\" || $ext==\"png\" || $ext==\"PNG\" && $ok==\"1\" && $ext!=\"\")
  6.  {
  7.  $nazwa = md5(uniqid(rand()));
  8.  $nazwa_pliku = &#092;"$nazwa\".\"$ext\";
  9.  copy (&#092;"$zdjecie_wstaw\", \"$nazwa_pliku\");
  10.  }
  11. ?>
Go to the top of the page
+Quote Post
tara
post
Post #3





Grupa: Zarejestrowani
Postów: 147
Pomógł: 0
Dołączył: 3.03.2004
Skąd: śląsk

Ostrzeżenie: (0%)
-----


nie lepiej numerować ? od 1 ?
  1. <?
  2. $zdjec = count(glob(&#092;"galeria/katalog/*.jpg\"));
  3. $jeden = 1;
  4.  
  5. $nowanazwa= $zdjec+$jeden;
  6.  
  7.  
  8.  
  9. if (move_uploaded_file($_FILES['fotka1']['tmp_name'], &#092;"galeria/katalog/\".$nowanazwa.\".jpg\")) { 
  10. print(&#092;"Zdjęcie o numerze <b> $nowanazwa</b> zostało pomyślnie wysłane na serwer do galerii \"); 
  11. } else { 
  12. print(&#092;"Niestety przysłanie nie powiodło się. \"); 
  13. }
  14. ?>


a jak bardzo chcesz zostać przy nazwach od usera, sprawdzaj czy plik istnieje przez file_exists.
Go to the top of the page
+Quote Post
mario
post
Post #4





Grupa: Zarejestrowani
Postów: 186
Pomógł: 0
Dołączył: 23.09.2003
Skąd: Siemianowice Śląskie

Ostrzeżenie: (0%)
-----


rozwiązanie które proponujesz jest proste, lecz ma wadę. Przy uploadzie bez możliwości kasowania zdjęc spoko, ale w momencie kiedy user będzie miał możliwość skasowania swojej fotki, pozostają "luki w liczeniu", tzn. jeżeli powiedzmy zostanie skasowane kilka(naście) fotek zostają wolne cyfry które można ponownie użyć. Gdyż zliczasz ilość zdjęć w katalogu. I tak powiedzmy nie ma 5, 9 i 15 zdjęcia z 15 wczytanych.
Skrypt poda że $zdjec = 12 gdyż 15-3 fotki skasowane daje właśnie 12. Ale nie możesz zapisać fotki jako 13.jpg gdyż jest, 14.jpg również itd. Musiałby zrobić pętelkę i sprawdzać czy jest wolne miejsce na następne liczenie, czyli dopiero by zapisał jako 16.jpg co daje już 4 razy wykonanie pętli (13, 14, 15, 16). Gdy tego będzie więcej analogicznie pętla zostanie wykonana znacznie więcej razy. Nie wspominam już o możliwości powtórnego nazewnictwa 5.jpg, 9.jpg i 15.jpg

W moim rozwiązaniu mając daną losową nazwę składającą się z 32 znaków (cyfry 0-9 i litery a-z) masz znacznie więcej kombinacji, można sobie policzyć ile jest mozliwych takich kombinacji - mnóstwo. Gwarantuję że aby się dana nazwa powtórzyła jest tak jak szansa wygrania w toto, więc co najwyżej warunek sprawdzający czy dana fotka o takiej nazwie istnieje wykona się co najwyżej raz.

Moim zdaniem obie metody są dobre, jak każdy kod php ma swoje wady i zalety. Każdy cel można osiągnąć na milion sposobów, a jak to zrobić należy już do twórcy.
Go to the top of the page
+Quote Post
tara
post
Post #5





Grupa: Zarejestrowani
Postów: 147
Pomógł: 0
Dołączył: 3.03.2004
Skąd: śląsk

Ostrzeżenie: (0%)
-----


akurat ten mój kod został stworzony bez możliwości usuwania fotek (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

w przypadku o którym piszesz trza by zmodyfikować o sprawdzanie czy plik istnieje.

EDIT

można by też datą i godziną wstawienia. Wtedy by łatwiej było obsługiwać taką galerie fotek.

Ten post edytował tara 5.05.2005, 20:40:08
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 26.09.2025 - 18:17