Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] upload i zmniejszanie obrazków w locie
Forum PHP.pl > Forum > Przedszkole
wzd
Witam, proszę ekspertów o rzucenie okiem na ten kod. Już nie mam pojęcia gdzie popełniam błąd.
Chodzi mi o to, aby pobrać plik obrazka, zmniejszyć go do określonej wielkości i przekopiować do katalogu upload.

Oto mój kod

Formularz
  1. <form action="test.php" method="post" enctype="multipart/form-data">
  2. <input type="hidden" name="MAX_FILE_SIZE" value="50000">
  3. <p>Upload Image: <input type="file" name="logo"><br/>
  4. <font size="1">Podaj plik</font><br/>
  5. <br/>
  6. <input type="submit" name="submit" value="Upload">
  7. </form>


Kod PHP
  1. <?php
  2.  
  3. if(isset($_POST['submit']))
  4. {
  5. $logo_tmp = $_FILES['logo']['tmp_name'];
  6. $logo_name = $_FILES['logo']['name'];
  7.  
  8. $path_thumbs = "/tmp";
  9.  
  10. $losowa_nazwa = md5(time());
  11. $losowa_nazwa = rand(0,999999999);
  12.  
  13. $pobierz_rozszerzenie = explode ('.', $logo_name);
  14. $rozszerzenie = $pobierz_rozszerzenie[count($pobierz_rozszerzenie)-1];
  15.  
  16. $dozwolone = array(".gif",".jpg",".png",".jpeg");
  17.  
  18. $thumb_path = substr($logo_tmp,0,strrpos($logo_tmp, '.')).'_min.jpg';
  19. $max_width = $max_height=100;
  20.  
  21. if(!is_uploaded_file($logo_tmp))
  22. {
  23. echo "Brak pliku";
  24. exit();
  25. }
  26.  
  27. $img_attr = getimagesize($logo_tmp);
  28.  
  29. if($img_attr[0]>$img_attr[1])
  30. {
  31.  $scale = $img_attr[0] / $max_width;
  32.  }
  33.  else
  34.  {
  35.  $scale = $img_attr[1] / $max_height;
  36.  } 
  37.  
  38.  $w = floor($img_attr[0]/$scale);
  39.  $h = floor($img_attr[1]/$scale);
  40.  
  41.  $ext = strrchr($logo_name,'.');
  42.  $ext = strtolower($ext);
  43.  
  44.  if (in_array($ext,$dozwolone)) 
  45.  {
  46.  $nowy = imagecreatefromjpeg($logo_tmp);
  47.  $zmniejszony_obrazek = imagecreatetruecolor($w,$h);
  48. imagecopyresized($zmniejszony_obrazek, $nowy, 0, 0, 0, 0, $w, $h, $img_attr[0], $img_attr[1]);
  49. imagejpeg($zmniejszony_obrazek,"$path_thumbs/$losowa_nazwa.$rozszerzenie",100);
  50. imagedestroy($zmniejszony_obrazek);
  51. imagedestroy ($nowy);
  52. move_uploaded_file ($file_tmp, "/upload/$losowa_nazwa.$rozszerzenie");
  53.  }
  54.  
  55.  
  56. }
  57. ?>


Efekt działania jak narazie :
  1. <?php Warning: imagejpeg() [function.imagejpeg]: Unable to open '/tmp/739776611.jpg' for writing in C:Program FilesWebServhttpd\test.php on line 49
  2. ?>
Cysiaczek
Może opiszesz, co nie działa? Większość osób nie ma ochoty uruchamiać kodu, po to, aby zobaczyć jakiś parse error ;p

Pozdrawiam.
aiv
Odpalasz to pod windowsowym serwerem php a podajesz ścieżkę do /tmp
dadexix
Hm.. wygląda to tak jak by plik który tworzy php odrazu przybierał atrybut "tylko do odczytu"... sprawdz czy katalog o nazwie /tmp nie ma atrybutu "tylko do odczytu"
PS.
Kod
    $losowa_nazwa = md5(time());
    $losowa_nazwa = rand(0,999999999);


Najpierw robisz losową nazwę za pomocą md5(time()) a potem nadpisujesz to za pomocą rand()... to nie ma przecież sensu ponieważ robisz coś po to by to usunąć... mądrszejsze będzie
Kod
    $losowa_nazwa = md5(time());
    $losowa_nazwa .= rand(0,999999999);
wtedy do md5(time()) doda na końcu wynik z rand... tylko po co? przecież time zwraca liczbę sekund... zakładasz że w jednej sekundzie będzie uploadować kilka osób? to chyba lepiej

Kod
$losowa_nazwa = md5(microtime());
tutaj praktycznie nie ma możliwości że ktoś będzie w tym samym momęcie... no a teoretycznie się da - ale trudniej trafić niż w dużego lotka:)
@aiv
Cytat
Odpalasz to pod windowsowym serwerem php a podajesz ścieżkę do /tmp
ale kto powiedział że on nie zrobil sobie katalogu tmp? prawdą jest że poprawnie powinno być ./tmp ale /tmp też powinno działać:)
wzd
wprowadziłem wszelkie wasze sugestie i zaczęło działać przyzwoicie ale nie mam pojęcia dlaczego tworzone miniaturki są słabej jakości ?
mike
imagecopyresized() -> imagecopyresampled()
wzd
Cytat(mike @ 9.01.2008, 14:31:51 ) *
imagecopyresized() -> imagecopyresampled()


dzięki nie zauważyłem tego smile.gif działa wyśmienicie
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.