Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Masowe uploadowanie i skalowanie zdięć
Forum PHP.pl > Forum > PHP
Tival
Witam serdecznie mam oto taki kod:
  1. <?php
  2.  
  3. ini_set('max_execution_time', 0);
  4.  
  5. echo "<form method='post' action='' enctype='multipart/form-data'>
  6. <input name='photo[]' id='filesToUpload' type='file' multiple='' />
  7. <input type='submit' value='Dodaj!'>
  8. </form>";
  9.  
  10. for ($i=0; $i<count($_FILES['photo']['name']); $i++)
  11. {
  12. $name = $_FILES['photo']['name'][$i];
  13. $type = $_FILES['photo']['type'][$i];
  14. $tmp_name = $_FILES['photo']['tmp_name'][$i];
  15. $size = $_FILES['photo']['size'][$i];
  16. $error = $_FILES['photo']['error'][$i];
  17.  
  18. list($szer_pocz, $wys_pocz) = getimagesize($tmp_name);
  19. $prop = $wys_pocz / $szer_pocz ;
  20.  
  21. $szer_konc = 800;
  22. $wys_konc = $szer_konc * $prop;
  23.  
  24. $new_name = md5(time()+uniqid());
  25. $new_name_full_image = $new_name."_full".".jpg";
  26. $new_name_thumb_image = $new_name."_thumb".".jpg";
  27.  
  28. echo resizeImage($tmp_name,"gallery/".$new_name_full_image, $szer_konc,$wys_konc,70);
  29. echo resizeImage($tmp_name,"gallery/".$new_name_thumb_image, $szer_konc/2,$wys_konc/2,50);
  30.  
  31. sleep(1);
  32. }
  33.  
  34. function resizeImage($SrcImage,$DestImage, $MaxWidth,$MaxHeight,$Quality)
  35. {
  36. list($iWidth,$iHeight,$type) = getimagesize($SrcImage);
  37. $ImageScale = min($MaxWidth/$iWidth, $MaxHeight/$iHeight);
  38. $NewWidth = ceil($ImageScale*$iWidth);
  39. $NewHeight = ceil($ImageScale*$iHeight);
  40. $NewCanves = imagecreatetruecolor($NewWidth, $NewHeight);
  41.  
  42. $NewImage = imagecreatefromjpeg($SrcImage);
  43.  
  44. if(imagecopyresampled($NewCanves, $NewImage,0, 0, 0, 0, $NewWidth, $NewHeight, $iWidth, $iHeight))
  45. {
  46. if(imagejpeg($NewCanves,$DestImage,$Quality))
  47. {
  48. if (imagedestroy($NewCanves))
  49. {
  50. return true;
  51. }
  52. }
  53. }
  54. }
  55.  
  56. ?>


Zadaniem skryptu jest zeskalowanie przesłanego zdięcia do dwóch rozmiarów a następnie zapisanie tych dwóch plików w katalogu pod podobnymi nazwami (thumb i full).
Skrypt TEORETYCZNIE działa... problem w tym że nie zawsze?!
Tak dobrze czytacie... dajmy na to wybiore 10 plików które chce wysłać i zeskalować, wrzucam je i z tych 10 skalują się może 4?
Gdy wyśle jeszcze raz te 10 plików (Przez F5 np) to zeskaluje się czasami 5, 6, 2 itp... takie randomowe liczby...
To samo ma miejsce przy mniejszej ilości plików (zamist 4, 2 itp).

Moje rozwiązanie problemu polega na wrzuceniu funkcji sleep(1); po zakończeniu skalowania (i wtedy pliki o rozdzielczosci 1920x1080 sklaują się wszystkie), ale kto wie co się stanie gdy wrzuce większe pliki (jeszcze nie sprawdzałem).

Macie jakiś pomysł jak to podkręcić żeby uzyskać maksymalną wydajność, i dokładność?
_Borys_
Tutaj coś nawala:
  1. $new_name = md5(time() + uniqid());

time()+uniqid() generuje przez chwilę identyczną wartość i obrazki się nadpisują tymi samymi nazwami.
Myślę, że time() niepotrzebny ponieważ uniqid() i tak jest generowany z time()

Po poprawieniu na:
  1. $new_name = md5(uniqid());

tworzy właściwą ilość obrazów i nie potrzeba sleep();
Tival
No tak! Racja!
uniqid() generuje string a time() liczbe smile.gif a ja próbowałem to do siebie dodać dlatego nie działało smile.gif

uniqid() dodałem bo zauważyłem że na md5(time()) tworzyły się te same nazwy (pętla wykonuje się kilka razy w przeciągu jedej sekundy stąd błąd smile.gif)
Ale zapomniałem że ma być "." a nie "+".
Dziękuje i wracam do dalszej pracy nad kodem!

Pozdrawiam!
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.