Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Zabezpieczenie uploadu zdjęć
Forum PHP.pl > Forum > PHP
marekpb
Witam
Chciałem zapytać, jak można zabezpieczyć skrypt uploadu zdjęć tak, aby kiedy pojawi się kolejne zdjęcie o takiej samej nazwie to np. zapisywało w innej nazwie ? Czy może lepiej zrobić, żeby automatycznie nazywały obrazy kolejno "obraz1", "obraz2", "obraz3" itp. ? Jeśli coś to jak można to zrobić ? Jakie wasze opinie i porady na ten temat ?

Oto mój niedoskonały kod. Jestem w trakcie nauki, ale staram się rozwijać ;] Pozdrawiam.
  1. $uploaddir = 'logo/';
  2.  
  3. if($_FILES['plik1']['error'] == UPLOAD_ERR_OK) {
  4. $new_name = $uploaddir.$_FILES['plik1']['name'];
  5. $trans = array("ą" => "a", "ć" => "c", "ę" => "e", "ł" => "l", "ń" => "n", "ó" => "o", "ś" => "s", "ż" => "z", "ź" => "z");
  6. $new = strtr($new_name, $trans);
  7. $temp_name = $_FILES['plik1']['tmp_name'];
  8. if($_FILES['plik1']['size'] < 307200) {
  9. if(move_uploaded_file($temp_name, $new)) {
  10.  
  11. //Przypisujemy do zmiennej $img_path ścieżke do obrazka
  12. $img_path = $new;
  13.  
  14. //Tworzymy scieżkę do miniaturki
  15. $thumb_path = substr($img_path,0,strrpos($img_path,'.')).'.th.jpg';
  16.  
  17. //ustalamy maksymalny dopuszczalny rozmiar miniatury
  18. $max_width=$max_height=200;
  19.  
  20. //Sprawdzamy czy obraz istnieje
  21. if(!file_exists($img_path))die('<p>Plik obrazu nie istnieje</p>');
  22.  
  23. //Pobieramy informacjie o obrazie
  24. $img_attr = getimagesize($img_path);
  25.  
  26. //Sprawdzamy czy obraz jest wiekszy na szerokość czy na wysokość
  27. // i zmniejszamy odpowiednio rozmiar
  28. // $img_attr[0] - szerokosc, $img_attr[1] - wysokość
  29. if($img_attr[0]>$img_attr[1]){
  30. $scale = $img_attr[0] / $max_width;
  31. }else{
  32. $scale = $img_attr[1] / $max_height;
  33. }
  34.  
  35. //Tworzymy obraz miniaturki
  36. $w = floor($img_attr[0]/$scale);
  37. $h = floor($img_attr[1]/$scale);
  38. $thumb = imagecreatetruecolor($w,$h);
  39.  
  40. //Kopiujemy obraz pomniejszajac go,
  41. imagecopyresampled($thumb, imagecreatefromjpeg($img_path), 0, 0, 0, 0, $w, $h, $img_attr[0], $img_attr[1]);
  42.  
  43. //Zapisujemy do pliku (jakość 85)
  44. imagejpeg($thumb,$thumb_path,85);
  45.  
  46. }
  47.  
  48. } else { echo "Za duży plik";}
  49.  
  50. }
bełdzio
zobacz ostatni punkt http://www.beldzio.com/bezpieczny-upload-plikow
Fafu
file_exists + rand
Fifi209
A o md5_file poprzednicy nie słyszeli ? Robisz md5 dla pliku i to od razu może być nazwa tego pliku i będzie unikalna.
Unik2psc
md5_file + dla pewnosci sprawdzasz czy taka nazwa istnieje, dla najwiekszej pewnosci
  1. for($i=0; $i>0; $i)
  2. {
  3. //kod sprawdzajacy jestli nazwa wolna wtedy
  4. $i = 1;
  5. }

//edit --- czepiasz sie szczegolow - chodzilo o sama logike ale cóż.
Fifi209
Cytat(Unik2psc @ 12.08.2009, 22:38:08 ) *
md5_file + dla pewnosci sprawdzasz czy taka nazwa istnieje, dla najwiekszej pewnosci
  1. for(i=0; i=1)
  2. {
  3. kod sprawdzajacy jestli nazwa wolna wtedy
  4. i = 1;
  5. }


A w jakim języku kod który dałeś?

Co do unikatowości może dać nawet md5 + microtime lub time.
gcdreak
Jest wiele możliwości nadania unikatowej nazwy i z tego co czytam to każdy z Was podaje swoje sposoby.
Mimo wszystko najczęściej spotykam się ze sposobem
  1. md5( time( ) . $fileName )
ucho
Tyle odpowiedzi i wszystkie błędne tongue.gif Ze względu na wyścigi unikalną nazwę pliku może zapewnić tylko system operacyjny, jednocześnie z wygenerowaniem nazwy musi mieć miejsce stworzenie pliku. W php jest oczywiście do tego gotowa funkcja: "tempnam".
pyro
...

  1. $uploaddir = 'logo/';
  2. $nazwa_pliku = 'obraz';
  3.  
  4. while(file_exists($uploaddir.$nazwa_pliku))
  5. {
  6. $i++;
  7. $nazwa_pliku .= $i;
  8. }
  9.  
  10. // Jeżeli jeszcze chcesz zachować rozszerzenie pliku, to już będzie dla Ciebie praca domowa :)
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.