PHP: нехватка памяти, что делать? - PullRequest
1 голос
/ 11 ноября 2010

Я получаю эту ошибку, когда я пытаюсь обрезать изображение, я только что загрузил. Размер загруженного изображения составляет около 3 МБ.

Вот ошибка

<br />
<b>Fatal error</b>:  Out of memory (allocated 45088768) (tried to allocate 15552 bytes) <br />

И это происходит, когда я пытаюсь использовать эту функцию: imagecreatefromjpeg ($ src);

У меня наверху:

ini_set('memory_limit', '256M'); 

Так как это может быть нехватка памяти, и как я должен решить это? Мой лимит на загрузку изображений стандартный 6MB. (Хотя он прекрасно загружается на сервер, но когда я использую кадрирование, я получаю сообщение об ошибке в строке с функцией imagecreatefromjpeg () и «недостаточно памяти ..»)

Ответы [ 3 ]

2 голосов
/ 11 ноября 2010

При выполнении обработки изображений с помощью GD , всегда всегда освобождайте использованную память с помощью imagedestroy и делайте это как можно раньше. Поэтому, когда вам больше не нужен ресурс изображения, немедленно уничтожьте его с помощью imagedestroy.

1 голос
/ 11 ноября 2010

PHP обычно позволяет изменять настройку memory_limit во время выполнения. Однако есть некоторые расширения, такие как Suhosin, которые отключают это поведение. Проверьте, есть ли в вашей установке PHP расширение Suhosin, загруженное с помощью phpinfo (). Если это так, проверьте, установлено ли для параметра * suhosin.memory_limit * значение 0. Если это так, это объяснит это поведение (не обновляя memory_limit), и вам придется связаться с системным администратором, чтобы поднять этот предел.

Также см. http://www.hardened -php.net / suhosin / configuration.html # suhosin.memory_limit

0 голосов
/ 12 ноября 2010

A безопасное решение состоит в применении некоторого фильтра, который предотвращает обработку изображения (или, по крайней мере, выдает некоторое предупреждение), когда процессу потребуется больше памяти, чем допустимый предел.В руководстве по PHP imgcreatefromjpeg есть некоторая пользовательская функция (проверка комментария), которая позволяет рассчитать объем памяти, необходимый для обработки изображения.На основе вычислений вы можете ограничить максимальный размер загружаемого изображения, чтобы пользователь не мог вызвать ошибку ограничения памяти.

примечание : не забудьте добавить еще несколько МБ при расчете.

Но если вы настаиваете на том, чтобы не ограничивать размер изображения, попробуйте попросить хост увеличить лимит памяти или использовать сторонние службы, такие как Google Images Python Api .

...