Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Allowed memory size of 8388608 bytes exhausted
KCG
post
Post #1





Grupa: Zarejestrowani
Postów: 449
Pomógł: 4
Dołączył: 1.12.2006

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


Przy dodawaniu zdjęcia mam taki błąd:
Fatal error: Allowed memory size of 8388608 bytes exhausted (tried to allocate 5200 bytes) in D:\users\trudny\motocykl\o_czesci.php on line 136
Zwiększyłem ini_set() limit pamięci na około 50MB. Na lokalnym tego nie mam.
Kod:
  1. <?php
  2. $image_name = imagecreatefromjpeg($img);
  3. $getimg = getimagesize($img);
  4. list($width,$height) = $getimg;
  5. $image = imagecreatetruecolor($width,$height);
  6. imagecopyresampled($image,$image_name,0,0,0,0,$width,$height,$width,$height);
  7. imagejpeg($image,$img);
  8. imagedestroy($image);
  9.  
  10. //watermark
  11. $getimg = getimagesize($img);
  12. list($width,$height) = $getimg;
  13. $water_src = 'images/znak_wodny.png';
  14. $watermark = imagecreatefrompng($water_src);
  15. list($wwidth,$wheight) = getimagesize($water_src);
  16. $image = imagecreatetruecolor($width,$height);
  17. imagecopyresampled($image,$image_name,0,0,0,0,$width,$height,$width,$height);
  18. imagecopy($image,$watermark,10,10,0,0,$wwidth,$wheight);
  19. imagejpeg($image,$img);
  20. imagedestroy($image);
  21.  
  22. //thumb
  23. $imageThumbName = $imgName.'t.jpg';
  24. $widthT = 100;
  25. $heightT = $widthT/$width*$height;
  26. $imageThumb = imagecreatetruecolor($widthT,$heightT);
  27. $image_name = imagecreatefromjpeg($img);
  28. imagecopyresampled($imageThumb,$image_name,0,0,0,0,$widthT,$heightT,$width,$height);
  29. imagejpeg($imageThumb,'images/gielda/moto/'.$imageThumbName);
  30. //new thumb
  31. imagedestroy($imageThumb);
  32. imagedestroy($image_name);
  33. $imgThumbName = $imgName.'tt.jpg';
  34. $imgt = imagecreatefromjpeg($img);
  35. $imgTH = 140;
  36. $imgTW = $imgTH/$height*$width;
  37. $srcX = ($imgTW-100)/2;
  38. $imgT = imagecreatetruecolor($imgTW,$imgTH);
  39. imagecopyresampled($imgT,$imgt,0,0,0,0,$imgTW,$imgTH,$width,$height);
  40. imagedestroy($imgt);
  41. $imgT2 = imagecreatetruecolor(100,140);
  42. imagecopymerge($imgT2,$imgT,0,0,$srcX,0,$imgTW,$imgTH,100);
  43.  imagejpeg($imgT2,'images/gielda/moto/'.$imgThumbName);
  44.  imagedestroy($imgT2);
  45. imagedestroy($imgT);
  46. ?>


--------------------
9242594 - zaczynasz? jak mogę, to pomogę :D /podstawowa znajomość php :P /
"to pomoc zawsze będzie gestem pięknym, zaliczana do tych teraz rzadko spotykanych..."
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 13)
Kowalikus
post
Post #2





Grupa: Zarejestrowani
Postów: 111
Pomógł: 25
Dołączył: 23.07.2004

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


Spróbuj pobrać czy ini_set(); zadziałał poprzez ini_get('memory_limit'); Jeśli nie działa spróbuj w htaccess dodać php_value memory_limit 32M


--------------------
Go to the top of the page
+Quote Post
vtuner
post
Post #3





Grupa: Zarejestrowani
Postów: 220
Pomógł: 10
Dołączył: 23.08.2005
Skąd: Łódź

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


Może lepiej popracować nad optymalizacją skryptu.
Go to the top of the page
+Quote Post
KCG
post
Post #4





Grupa: Zarejestrowani
Postów: 449
Pomógł: 4
Dołączył: 1.12.2006

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


No tak też myślałem, bo raz działa, raz nie.
vtuner masz coś konkretnego na myśli?


--------------------
9242594 - zaczynasz? jak mogę, to pomogę :D /podstawowa znajomość php :P /
"to pomoc zawsze będzie gestem pięknym, zaliczana do tych teraz rzadko spotykanych..."
Go to the top of the page
+Quote Post
.radex
post
Post #5





Grupa: Zarejestrowani
Postów: 1 657
Pomógł: 125
Dołączył: 29.04.2006

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


to


--------------------
blog | Tadam — minutnik do Pomodoro na Maka :)
Go to the top of the page
+Quote Post
vtuner
post
Post #6





Grupa: Zarejestrowani
Postów: 220
Pomógł: 10
Dołączył: 23.08.2005
Skąd: Łódź

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


Najpierw musiałbym znać przeznaczenie tego skryptu, żeby wiedzieć co jak pozmieniać.
Go to the top of the page
+Quote Post
KCG
post
Post #7





Grupa: Zarejestrowani
Postów: 449
Pomógł: 4
Dołączył: 1.12.2006

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


radex_p nie pytam, co to, tylko jak :]
Skrypt dodaje zdjęcie do ogłoszenia. Jest ograniczenie do 500kB. Zapisuje je, następnie tworzy 2 miniaturki, no i to tyle.
Jak widać po move_uploaded_file() wczytuje zdjęcie i zapisuje jeszcze raz przez imagecopyresampled, bo zauważyłem, że przez to zdjęcie ma mniejszą objętość.


--------------------
9242594 - zaczynasz? jak mogę, to pomogę :D /podstawowa znajomość php :P /
"to pomoc zawsze będzie gestem pięknym, zaliczana do tych teraz rzadko spotykanych..."
Go to the top of the page
+Quote Post
vtuner
post
Post #8





Grupa: Zarejestrowani
Postów: 220
Pomógł: 10
Dołączył: 23.08.2005
Skąd: Łódź

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


Wiadomo, że skrypt nie wyrabia się, bo za dużo jest tych funkcji tworzących i modyfikujących zdjęcia.

Ja bym zrobił tak:
- wgrywam oryginalne zdjęcie
- przy wyświetlaniu za pomocą odpowiedniej klasy tworzę na podstawie dostarczonego linku do zdjęcia miniaturkę (o szerokości lub wysokości podanej jako następny parametr, w zależności jak sobie zrobisz klasę. Trzeba pamiętać, że klasa powinna tworzyć proporcjonalne rozmiary miniaturki). Co prawda jest utrata na jakości zdjęcia (niewielka), ale nie jest ona tak zła jak problem z pojemnością pamięci.

Myślę, że od tej strony powinieneś podejść do tego.

Ten post edytował vtuner 28.02.2008, 20:42:49
Go to the top of the page
+Quote Post
LonelyKnight
post
Post #9





Grupa: Zarejestrowani
Postów: 240
Pomógł: 13
Dołączył: 1.06.2007
Skąd: Wrocław

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


Cytat(vtuner @ 28.02.2008, 20:40:55 ) *
- przy wyświetlaniu za pomocą odpowiedniej klasy tworzę na podstawie dostarczonego linku do zdjęcia miniaturkę (o szerokości lub wysokości podanej jako następny parametr, w zależności jak sobie zrobisz klasę. Trzeba pamiętać, że klasa powinna tworzyć proporcjonalne rozmiary miniaturki). Co prawda jest utrata na jakości zdjęcia (niewielka), ale nie jest ona tak zła jak problem z pojemnością pamięci.


Nie jestem pewien czy dobrze Ciebie zrozumiałem - proponujesz autorowi aby nie tworzył miniaturki przy uploadzie tylko przy każdym wywołaniu zdjęcia? W każdej chwili kiedy miniaturka będzie potrzebna ma ją wtedy tworzyć? Jeśli tak to pomysł jest.... brrr... niedobry smile.gif Metoda na zabicie serwera smile.gif

Co do problemu to na forum przewijał się x razy.

Poza tym http://www.google.pl/search?q=+Allowed+memory+size+of

Ten post edytował LonelyKnight 28.02.2008, 21:34:20


--------------------
Good programming is 99% sweat and 1% coffee.
Make it idiot proof and someone will make a better idiot...
Go to the top of the page
+Quote Post
KCG
post
Post #10





Grupa: Zarejestrowani
Postów: 449
Pomógł: 4
Dołączył: 1.12.2006

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


No co do tego tworzenia przy wyświetlaniu też nie jestem pewien, a w skrypcie raczej tylko jest to, co potrzebne... No chyba, że jakoś łatwiej można to zrobić.
LonelyKnight, jak szukałem to głównie piszą, żeby zwiększyć memory_limit, który już zwiększyłem. Na serwerze na którym jest błąd mam chyba 8 czy 16 MB ramu. Jest darmowy, docelowo będzie na płatnym, np. home.pl daje max 80MB, z tego, co piszą. Może wtedy problemu nie będzie?


--------------------
9242594 - zaczynasz? jak mogę, to pomogę :D /podstawowa znajomość php :P /
"to pomoc zawsze będzie gestem pięknym, zaliczana do tych teraz rzadko spotykanych..."
Go to the top of the page
+Quote Post
LonelyKnight
post
Post #11





Grupa: Zarejestrowani
Postów: 240
Pomógł: 13
Dołączył: 1.06.2007
Skąd: Wrocław

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


Nie powinno być. Operacje na obrazkach zabierają dużo pamięci a jeśli nie możesz zwiększyć dostępnej pamięci to zrobisz niewiele. Proponuję Ci poczekać do momentu aż przeniesiesz sie na nowy serwer. Jeśli problem będzie dalej istniał, chociaż w to wątpię, to będziesz mógł zacząć kombinować, teraz chyba nie ma sensu.


--------------------
Good programming is 99% sweat and 1% coffee.
Make it idiot proof and someone will make a better idiot...
Go to the top of the page
+Quote Post
KCG
post
Post #12





Grupa: Zarejestrowani
Postów: 449
Pomógł: 4
Dołączył: 1.12.2006

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


W takim razie dzięki winksmiley.jpg Chciałem się upewnić po prostu. Jak coś, to napiszę. smile.gif


--------------------
9242594 - zaczynasz? jak mogę, to pomogę :D /podstawowa znajomość php :P /
"to pomoc zawsze będzie gestem pięknym, zaliczana do tych teraz rzadko spotykanych..."
Go to the top of the page
+Quote Post
Kocurro
post
Post #13





Grupa: Zarejestrowani
Postów: 461
Pomógł: 32
Dołączył: 17.09.2003
Skąd: Łódź

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


Jak już kolega wspomniał ale niedopowiedział:

1) Wgrywasz plik do odpowiedniego katalogu, obcinając go jak należy i rekompresując
2) Na wyświetlanie miniaturek tworzysz wrappera
3) Gdy wrapper otrzyma zapytanie o miniaturke sprawdza w cache'u czy ją ma
4) Jeśli ją ma to wysyła
5) Jeśli nie ma to tworzy i zapisuje w cache'u a następnie wysyła do klienta

Do tego daj ograniczenie by nikt nie mógł Ci wgrać zdjęcia o większym rozmiarze pliku niż jakiś ludzki rozmiar oraz od razu przed robieniem operacji sprawdzaj czy wymiary x, y są zgodne z jakimiś założeniami np. nie więcej niż v, w.

I jakby to powiedział mój ulubiony aktor w ulubionym filmie: nie ma ch*** fujarki winksmiley.jpg we wsi smile.gif

pozdr.

ps: jeśli i to nie poskutkuje to zmień serwer bo ten Cię oszukuje winksmiley.jpg

ps2: a po ki diabeł robisz to:

  1. <?php
  2.  
  3. $image_name = imagecreatefromjpeg($img);
  4. $getimg = getimagesize($img);
  5. list($width,$height) = $getimg;
  6. $image = imagecreatetruecolor($width,$height);
  7. imagecopyresampled($image,$image_name,0,0,0,0,$width,$height,$width,$height);
  8. imagejpeg($image,$img);
  9. imagedestroy($image);
  10. ?>


Przecież to nic nie robi - w teorii zrobi rekompresje ale ... nie zwalniasz zasobu $image_name chociażby ...

Dalej znowu tworzysz zasoby i ich nie zwalniasz ...

Przepisz to od nowa i wrzuć tutaj a powiem Ci czy dobrze robisz czy nie - wybacz, że samemu nie przepiszę Ci teraz ale siedzę w pracy.

pozdr.

Ten post edytował Kocurro 29.02.2008, 11:12:17
Go to the top of the page
+Quote Post
KCG
post
Post #14





Grupa: Zarejestrowani
Postów: 449
Pomógł: 4
Dołączył: 1.12.2006

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


8,20,31,32,40,44,45 linie w których są usuwane zasoby, bo jeśli dobrze rozumiem chodzi o image_destroy()?
Co do ps2 to zdjęcie ma mniejszy rozmiar niż jak się tylko zapisze. (przynajmniej tak mi wychodziło)
Mógłbyś mi przybliżyć wrapper i cache?


--------------------
9242594 - zaczynasz? jak mogę, to pomogę :D /podstawowa znajomość php :P /
"to pomoc zawsze będzie gestem pięknym, zaliczana do tych teraz rzadko spotykanych..."
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 03:37