Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z uploadem plików
Forum PHP.pl > Forum > PHP
deha21
Mam 3 inputy do wgrywania obrazków. Zrobiłem przez javascript ograniczenie do 2MB. Próbując je wgrać na serwer nie zawsze się to udaje bo czasem gdy wgram 3 pliki po 2MB one w ogóle się nie dodają, co więcej inne dane z POST również nie są przesyłane.

Kod funkcji zmniejszania zdjęć:
  1. // Zmniejszanie do odpowiedniej wielkości
  2. function resize($filef, $new_width, $new_height, $thumb, $quality) {
  3. $info = getimagesize($filef);
  4. if ($info === false)
  5. return false;
  6. $img = null;
  7. $img = imagecreatefromjpeg($filef);
  8. $th = imagecreatetruecolor($new_width, $new_height);
  9.  
  10. imagecopyresampled($th, $img, 0, 0, 0, 0, $new_width, $new_height, $info[0], $info[1]);
  11. imagejpeg($th, $filef, $quality);
  12. imagedestroy($th);
  13. imagedestroy($img);
  14. return true;
  15.  
  16. }
  17.  
  18. //tworzenie miniaturki 80x80
  19. function resize2($filef, $new_width, $new_height, $thumb, $quality) {
  20. $info = getimagesize($filef);
  21. if ($info === false)
  22. return false;
  23. $img = null;
  24. $img = imagecreatefromjpeg($filef);
  25. $th = imagecreatetruecolor(80, 80);
  26.  
  27. imagecopyresampled($th, $img, 0, 0, 0, 0, $new_width, $new_height, $info[0], $info[1]);
  28. imagejpeg($th, $filef, $quality);
  29. imagedestroy($th);
  30. imagedestroy($img);
  31. return true;
  32.  
  33. }


Ogólny skrypt upload'u zdjęć:
  1. function adpic($id,$arg,$key,$position) {
  2.  
  3. $path="../files/images/".$id;
  4. if (!file_exists($path)) { mkdir($path); chmod($path, 0777); }
  5. $newimage=uniqid().".jpg";
  6. move_uploaded_file($_FILES[$arg]["tmp_name"][$key],$path."/".$newimage);
  7. $info = getimagesize($path."/".$newimage);
  8.  
  9. if ($info[0]>$info[1]) {
  10. if ($info[0]>625) {
  11. $height=(625/$info[0])*$info[1];
  12. resize($path."/".$newimage, 625, $height, $path."/".$newimage, 75);
  13. }
  14. } elseif ($info[0]<$info[1]) {
  15. if ($info[1]>450) {
  16. $width=(450*$info[0])/$info[1];
  17. resize($path."/".$newimage, $width, 450, $path."/".$newimage, 75);
  18. }
  19. }
  20.  
  21. if ($info[0]<=$info[1]) {
  22. copy($path."/".$newimage,$path."/thumb_".$newimage);
  23. $thumb_height = (80/$info[0])*$info[1];
  24. resize2($path."/thumb_".$newimage, 80, $thumb_height, $path."/thumb_".$newimage, 80);
  25. } elseif ($info[0]>$info[1]) {
  26. copy($path."/".$newimage,$path."/thumb_".$newimage);
  27. $thumb_width=(80*$info[0])/$info[1];
  28. resize2($path."/thumb_".$newimage, $thumb_width, 80, $path."/thumb_".$newimage, 80);
  29. }
  30.  
  31. $pic=mysql_query("INSERT INTO pics values ('','".$id."','".$newimage."','".$position."')");
  32.  
  33. }


Skrypt wywoływania funkcji:
  1. foreach ($_FILES["image"]["error"] as $key => $error) {
  2. $position=$position+1;
  3. if ($_FILES["image"]["name"][$key]!="") {
  4. adpic($id,image,$key,$position);
  5. }
  6. }


W przypadku gdy skrypt się sypie wyskakują błędy o niezidentyfikowanych zmiennych a także "Invalid argument supplied for foreach()" (pewnie ze względu, że te zmienne nie są przesyłane).
aleks365
Napisałem nie dawno podobny skrypt może się przyda

  1. <form action="" method="post" enctype="multipart/form-data">
  2. <input name="image" type="file">
  3. <input name="" type="submit">
  4. </form>
  5.  
  6. <?php
  7.  
  8. // >> UPLOAD <<
  9. $plik_tmp = $_FILES['image']['tmp_name'];
  10. $plik_nazwa = $_FILES['image']['name'];
  11.  
  12. $save_file = $plik_nazwa;
  13.  
  14.  
  15. if(is_uploaded_file($plik_tmp)) {
  16. move_uploaded_file($plik_tmp, ''.$save_file.'');
  17. echo "wszystko poszlo ok";
  18.  
  19.  
  20.  
  21. // TWORZENIA ZNAKU WODNEGO
  22. $znak = imagecreatefrompng('watermark.png'); // plik który będzie dodany na obraz 03.jpg
  23. $img = imagecreatefromjpeg($save_file); // plik na który będzie nałożony znak downy czyli plik Obrazek1.png
  24.  
  25. $plik_w = imagesx($img); // szerokość pliku 03.jpg
  26. $plik_h = imagesy($img); // wysokość pliku 03.jpg
  27.  
  28. $znaczek_w = imagesx($znak); // szerokość znaczka Obrazek1.png
  29. $znaczek_h = imagesy($znak); // wysokość znaczka Obrazek1.png
  30.  
  31.  
  32. $od_x = $plik_w - $znaczek_w; // Wyznaczanie położenie w tym przypadku br czyli dolny prawy róg
  33. $od_y = $plik_h - $znaczek_h; // Wyznaczanie położenie w tym przypadku br czyli dolny prawy róg
  34.  
  35.  
  36. imagecopy($img, $znak, $od_x, $od_y, 0, 0, $znaczek_w, $znaczek_h); // Kopiuje i nakłada na obraz znak downy
  37.  
  38.  
  39. imagejpeg($img, $save_file, 80); // Zapisuje gotowy plik, liczba 100 oznacza jakość obrazu można ustawić od 0 do 100
  40.  
  41.  
  42.  
  43.  
  44.  
  45. // TWORZENIE MINIATURKI
  46. $width = imagesx($img);
  47. $height = imagesy($img);
  48.  
  49.  
  50. $width_mini = 250; // szerokosc obrazka
  51. $height_mini = 170; // wysokosc obrazka
  52. $img_mini = imagecreatetruecolor($width_mini, $height_mini);
  53.  
  54.  
  55. imagecopyresampled($img_mini, $img, 0, 0, 0, 0, $width_mini , $height_mini, $width , $height);
  56.  
  57. $min_save_file = 'min-'.$save_file.''; // nazwa miniaturki
  58.  
  59. imagejpeg($img_mini, $min_save_file, 90); // utworzona miniaturka liczba (80) oznacza jakos obrazka od 0 do 100
  60. imagedestroy($img);
  61. imagedestroy($img_mini);
  62. }
  63.  
  64. ?>
deha21
Dzięki aleks, przerobiłem nieco Twój skrypt bo chyba był lepszy od mojego. Niestety, dalej mam ten sam problem. Przy wgraniu tych 3 obrazków dalej się nie wgrywają i inne zmienne są puste :/

Sprawdziłem kod, okazuje się że chyba to nie jest skrypt wgrywania obrazków. Wykomentowałem go i się okazało, że dalej zmienne nie są przesyłane... Cholera, o co chodzi!?
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.