Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Jak sobie poradzić z przesyłaniem dużych plików?
deha21
post
Post #1





Grupa: Zarejestrowani
Postów: 544
Pomógł: 5
Dołączył: 18.08.2009

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


Mam problem ze skryptem. Przez 5 inputów ładuję 5 plików, powiedzmy po 3MB - chodzi o JPG. Skrypt ma zadanie przerobić je jeżeli są większe od 800x600 i zmniejszyć, po czym dorobić miniaturkę. Jeżeli wgram np. tylko dwa obrazki z pięciu możliwych to skrypt normalnie wchodzi. Jeśli natomiast wgram te 5 to skrypt się sypie i wgrywa np. tylko jeden albo nic. Memory_limit mam ustawiony na 128MB - myślałem że to pomoże ale nic. Przy okazji czyści mi inne zmienne które były w tym formularzu. Nie wyskakuje żaden błąd, mimo włączonych opcji ich pokazywania. WTF, że tak się zapytam.

Kod zmniejszania (funkcje resize i resize2):
  1. <?php
  2. ini_set("display_errors",1);
  3. ini_set("memory_limit","128M");
  4.  
  5. function resize($filef, $new_width, $new_height, $thumb, $quality) {
  6. $info = getimagesize($filef);
  7. if ($info === false)
  8. return false;
  9. $img = null;
  10. $img = imagecreatefromjpeg($filef);
  11. $th = imagecreatetruecolor($new_width, $new_height);
  12.  
  13. imagecopyresampled($th, $img, 0, 0, 0, 0, $new_width, $new_height, $info[0], $info[1]);
  14. imagejpeg($th, $filef, $quality);
  15. imagedestroy($th);
  16. imagedestroy($img);
  17. return true;
  18.  
  19. }
  20.  
  21. function resize2($filef, $new_width, $new_height, $thumb, $quality) {
  22. $info = getimagesize($filef);
  23. if ($info === false)
  24. return false;
  25. $img = null;
  26. $img = imagecreatefromjpeg($filef);
  27. $th = imagecreatetruecolor(80, 80);
  28.  
  29. imagecopyresampled($th, $img, 0, 0, 0, 0, $new_width, $new_height, $info[0], $info[1]);
  30. imagejpeg($th, $filef, $quality);
  31. imagedestroy($th);
  32. imagedestroy($img);
  33. return true;
  34.  
  35. }
  36.  
  37. ?>


Kod wgrywania (funkcja uruchamiana kilkakrotnie w przypadku kilku plików):
  1. function adpic($id,$arg,$position) {
  2.  
  3. $path="../pliki/".$id;
  4. if (!file_exists($path)) { mkdir($path); chmod($path, 0777); }
  5. $newimage=uniqid().".jpg";
  6. move_uploaded_file($_FILES[$arg]["tmp_name"],$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 zdjecie values ('','".$id."','".$newimage."','".$position."')");
  32. }
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
deha21
post
Post #2





Grupa: Zarejestrowani
Postów: 544
Pomógł: 5
Dołączył: 18.08.2009

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


Kurcze, właśnie chciałbym to zrobić jak najprościej bez zewnętrznych skryptów. Zależy mi właśnie na tym żeby były "zwykłe inputy" do zdjęć. Nie ma jakiegoś sposoby na to żeby kolejny skrypt wykonał się dopiero po wykonaniu poprzedniego? coś a'la "break until sie zrobi poprzedni" ;p
Go to the top of the page
+Quote Post

Posty w temacie


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: 12.10.2025 - 15:24