Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Pamięc serwera a wgrywanie plików
johnyMajster
post
Post #1





Grupa: Zarejestrowani
Postów: 151
Pomógł: 2
Dołączył: 2.08.2012
Skąd: Wrocław

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


Witam
Zrobiłem sobie upload plków i mam pewien problem otóż przy ładowaniu obrazka o rozmiarze 8 megabajtów otrzymuję taki oto bład
Allowed memory size of 134217728 bytes exhausted (tried to allocate 6293 bytes)

Z tego co przeczytałem oznacza on że serwer potrzebuje wiecej pamieci niz mu przydzieliłem i nawet wiem jak ją zwiekszyc.

Pojawia sie jednak pytanie czy to normalne ze przy przetwarzaniu obrazka 8megabajtów serwer potrzebuje az tyle pamieci?? To co sie stanie jak będę miał serwer z 8GB ramu i milion wgrywanych plików przez różnych użytkowników (IMG:style_emoticons/default/sad.gif) (IMG:style_emoticons/default/questionmark.gif) (IMG:style_emoticons/default/questionmark.gif)

Ten post edytował johnyMajster 29.09.2012, 21:30:56
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
johnyMajster
post
Post #2





Grupa: Zarejestrowani
Postów: 151
Pomógł: 2
Dołączył: 2.08.2012
Skąd: Wrocław

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


Cytat(Crozin @ 30.09.2012, 19:54:21 ) *
Problemem nie jest wgrywanie pliku, a jego wczytanie przez skrypt generujący miniatury, ponieważ ten ostatni wymaga całego obrazu w pamięci. Obraz o rozdzielczości 6700×4700 to 90 do 120 MiB danych (w zależności od obecności kanału alpha w obrazie).

Jeżeli mamy problem z pojemnością jakieś zmiennej/dysku/czegokolwiek powinniśmy dążyć do zwiększenia jej nie dwukrotnie, a o rząd wielkości. Tutaj byłoby to więc 1024 MiB, jednak 512 MiB myślę, że również wystarczy.


Sprawdziłem błąd generuje linijka z ImageCreateFromJPEG.
Zastanawia mnie jak pisac optymalne skrypty moze cos podpowiecie (IMG:style_emoticons/default/smile.gif)
korzystam ze skryptu z gajdy:

  1. <?php
  2.  
  3. class My_Thumbnail
  4. {
  5.  
  6. /*
  7.   * Jeśli obraz jest poziomy to jest skalowany do szerokości AWidth
  8.   * Jeśli obraz jest pionowy to jest skalowany do wysokości AHeight
  9.   * Kwadratowy: skalujemy do wysokości AHeight
  10.   *
  11.   * Parametr $AImg jest obiektem GD
  12.   * Wynik - miniaturka - jest zwracany jako obiekt GD
  13.   */
  14. public static function gdThumbnailObj($AImg, $AWidth, $AHeight)
  15. {
  16. if (!$AImg) {
  17. die('gd_thumbnail_obj() - $AImg error');
  18. }
  19.  
  20. $AImg_X = ImageSX($AImg);
  21. $AImg_Y = ImageSY($AImg);
  22.  
  23. $tmp_Y = ($AWidth / $AImg_X) * $AImg_Y;
  24. $tmp_X = ($AHeight / $AImg_Y) * $AImg_X;
  25.  
  26. if ($tmp_Y <= $AHeight){
  27. $thumbnail_X = $AWidth;
  28. $thumbnail_Y = $tmp_Y;
  29. } else {
  30. $thumbnail_X = $tmp_X;
  31. $thumbnail_Y = $AHeight;
  32. }
  33.  
  34. $thumbnail = ImageCreateTrueColor(
  35. $thumbnail_X,
  36. $thumbnail_Y
  37. );
  38.  
  39. imageAlphaBlending($thumbnail, false);
  40. imageSaveAlpha($thumbnail, true);
  41.  
  42. ImageCopyResized(
  43. $thumbnail, $AImg, //przeznaczenie, zrodlo
  44. 0, 0, //gdzie ma trafic w przeznaczeniu
  45. 0, 0, //skad ma pochodzic ze zrodla
  46. $thumbnail_X, $thumbnail_Y, //wymiary, jakie ma zająć w przeznaczeniu
  47. $AImg_X, $AImg_Y //wymiary pobierane ze źródła
  48. );
  49. return $thumbnail;
  50. }
  51.  
  52.  
  53. /*
  54.   * Funkcja identyczna jak function gd_thumbnail_obj()
  55.   * Różni się parametrami.
  56.   *
  57.   * Pierwszy parametr - $AFileName - to nazwa pliku do przeskalowania
  58.   * Wynik - miniaturka - jest zwracany jako obiekt GD
  59.   */
  60. public static function gdThumbnailFile($AFileName, $AWidth, $AHeight, $destFilename, $quality = 95)
  61. {
  62. $img = ImageCreateFromJPEG($AFileName);
  63. $mini = self::gdThumbnailObj($img, $AWidth, $AHeight);
  64. imagejpeg($mini, $destFilename, $quality);
  65. }
  66.  
  67. }

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: 3.10.2025 - 09:58