Fatal error: Allowed memory size of 67108864 bytes exhausted

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
iNviNho
Člen | 352
+
0
-

Ahojte chalani,

Upravujem starý projekt po kolegovi z konca roku 2014 kedy ešte fičalo Nette 2.0 a pri použití knižnice Image.php
dostávam error:

Fatal error: Allowed memory size of 67108864 bytes exhausted (tried to allocate 14496 bytes) in /nfsmnt/hosting1_2/e/f/ef64d983-896d-4493-a2bf-cd669da275c0/XXXXX.com/web/vendor/nette/nette/Nette/common/Image.php:164

Kód:

<?php
$thumbSmallImg = Image::fromFile($values->thumbnail);
$thumbSmallImg->resize(290, 290);

$thumbSmallImg->save($newFilenameSmall, 90, Image::PNG);
?>

Skúšal som použiť

<?php
ini_set('memory_limit', '64M');
?>

Ale len skočí allowed memory size z 16777216 na 67108864.

Neviete aký môže byť fix?

iNviNho
Člen | 352
+
0
-

Zákazník mi poslal daný obrázok a ide o 11mb obrázok… To by nemal byť problém …

CZechBoY
Člen | 3608
+
0
-

Tech 11MB je nejspis komprimovanych… kolik ti to zabere pri prevodu na BMP?

iNviNho
Člen | 352
+
0
-

Čo to znamená komprimovaných? Myslíš, že to môže robiť ta konverzia na Image::PNG ?

janpecha
Backer | 75
+
+1
-

Jaké jsou fyzické rozměry toho obrázku? 2000×2000? 5000×5000?

Jde o to, že ten obrázek si PHP v paměti rozloží na jednotlivé pixely, takže reálně může v paměti zabírat několik desítek, ale i stovek MB.

Editoval janpecha (26. 4. 2017 11:09)

Pavel Kravčík
Člen | 1196
+
+2
-

Myslím, že IrfanView Ti to dokáže odhadnout hned. http://imgur.com/a/p2oll

iNviNho
Člen | 352
+
0
-

Obrázok:
Rozmery: 3572×4755, 240dpi
Veľkosť: 11.2mb

A zastaví sa to vo vnútri funkcie Image::fromFile() na riadku 164

<?php
return new static(imagecreatefromjpeg($file));
?>

Takže čo sa takýmito obrázkami? Povedať zákazníkovi, že obrázky nesmú byť väčšie ako ja neviem 4mb? Alebo do určíteho rozlíška?

David Grudl
Nette Core | 8239
+
+2
-

x × y × 5 = 3572 × 4755 × 5 = 85MB

iNviNho
Člen | 352
+
0
-

@DavidGrudl prečo konštanta 5?:)

janpecha
Backer | 75
+
+1
-

Musíš se řídit podle rozlišení – u tohoto obrázku ti to dává v paměti nějakých 49 MB při použití 3 barevných kanálů, při použití 4 to už bude cca 65 MB, atd.

Alternativně můžeš použít rozšíření Imagick – to žere míň paměti a je i nepatrně rychlejší.

Editoval janpecha (26. 4. 2017 12:01)

iNviNho
Člen | 352
+
0
-

ďakujem :) rozumiem už problému a dám si na to bacha :)