Неустранимая ошибка : допустимый размер памяти 33554432 байт исчерпан (пытался выделить 4912 байт) в /var/www/development/example/system/libraries/Image.php в строке 130 .
Имеющееся изображение JPEG не имеет особо большого размера файла (741 КБ). Мы использовали этот же код для восстановления больших изображений. Однако изображение имеет необычно большие размеры (4912px x 3264px). Будет ли это иметь эффект?
Что определяет использование памяти, когда PHP перестраивает изображение? Это только размер файла? Размеры? Плотность цвета? Тип файла?
Линия, на которой он
$f1 = 'imagecreatefrom' . $tag; $src = $f1($file);
Я думаю, что этого достаточно. Он не дошел до попытки восстановить изображение. Погрузить его в память было достаточно, чтобы сломать его.
Как сказал рики, установите ограничение памяти выше, если сможете. Также убедитесь, что размеры важнее размера файла (поскольку размер файла для сжатого изображения). Когда вы открываете изображение в GD, каждый пиксель получает на него 3-4 байта, RGB и, возможно, A. Таким образом, ваше изображение размером 4912px x 3264px должно использовать 48,098,304 до 64,131,072 байт памяти, плюс есть накладные расходы и любая другая память скрипт используется.
Увеличьте размер буфера памяти
php_value memory_limit 64M
в вашем .htacess
или ini_set('memory_limit','64M');
в вашем php-файле
Это зависит от вашей импликации. в последний раз, когда я работал над файлом csv с более чем 500 000 записей, я получил то же сообщение. Позже я представляю классы и пытаюсь закрыть открытые объекты. это уменьшает потребление мембран. если вы открываете изображение и редактируете его. это означает, что он загружается в память. в этом случае размер действительно пункт. если вы работаете с несколькими изображениями. Я запишусь на одно изображение и закрою это изображение. По моему опыту, когда я работал над файлами PDF-файлов, чтобы проверить метки обрезки. У меня была такая же ошибка.
//you can set the memory limits values // in htaccess php_value memory_limit 64M //or in you using following in php ini_set('memory_limit', '128M'); //or update it in your php.ini file
но если вы оптимизируете свой код. и используйте ориентированный на объект aproach, тогда потребление памяти будет очень меньше. потому что в том, что каждый объект имеет свою собственную область действия, и из этой области он уничтожается.
Размер используемой памяти зависит от размера и глубины цвета. Я также столкнулся с этой проблемой несколько лет назад, создав портфолио для фотографов. Единственный способ правильно решить эту проблему – переключить вашу библиотеку изображений с GD на фантазию. Imagick потребляет гораздо меньше памяти и не привязан к пределу памяти PHP.
Я должен сказать, что изображения, сделанные фотографами, были до 30MP. И установка предела памяти более 1024 МБ не имеет смысла в моих глазах.