2010-09-25 7 views
3

Привет, У меня есть следующая переменная ini, заданная в файле phpini.imagecreatefromjpeg + Проблема с памятью

max_execution_time 50000

memory_limit 40M

post_max_size 8M

Когда я пытаюсь сделать эскиз изображения его дает мне следующую ошибку:

Фатальная ошибка: Из памяти (выделено 30670848) (попытался выделить 14976 байт)

Размер изображения 700 kb.

Может ли кто-нибудь мне помочь?

ответ

2

Ваша проблема заключается не в том, что один вызов imagecreatefromjpeg(), а в память, которую вы выделили ранее. В конце концов, распределение не выполняется с запросом памяти всего на ~ 14 КБ.

Возможно, вы создали изображения ранее в том же скрипте, не отпуская их память с imagedestroy() или у вас возникла другая проблема с памятью. В последнем случае вы можете использовать инструмент отладки (например, webgrind), чтобы найти память.

+0

Отличная ссылка, спасибо! –

+0

Используйте http://php.net/memory_get_usage, чтобы отлаживать ваше приложение ... –

+0

Я попытался отладить использование memery, прежде чем использовать функцию памяти memnail = 4997244. Я также использую imagedestroy в миниатюре после statjdege. но по-прежнему происходит ошибка. –

2

Каково разрешение вашего изображения 700kb? На самом деле не имеет значения, насколько велика оригинальная .JPG. Если это очень «простой» образ, он может буквально составлять 10 000 х 10 000 пикселей. Когда он загружается/несжатый PHP, эти пиксели потребуют 10k x 10k x 3 = 286 мегабайт (10x квадратов раз 3 для каждого значения красного/зеленого/синего).

И, конечно же, вы говорите, что вы установили ограничение памяти на 40M, но у вас закончилась память всего 29,25 мегабайта. Возможно, что в настройке есть переопределение, возможно, в файле .conf для веб-сайта определенного сайта или в .htaccess, который устанавливает нижний предел, чем 40M.

+0

Разрешение изображения: 3700 x 5600 –

+1

Разрешение изображения: 3700 x 5600. Нет возможности переопределить значение, потому что мой код выглядит так: ini_set ('memory_limit', '200M'); ini_set ('post_max_size', '200M'); ini_set ('max_execution_time', '1000'); @move_uploaded_file(); _thumbnail ($ PHOTO_NAME, 125); _thumbnail ($ PHOTO_NAME, 175); _thumbnail ($ PHOTO_NAME, 360); –

+0

Действительно ли работает 'ini_set()'? Если вы находитесь на общем хосте, интернет-провайдер может заблокировать их, и вы не сможете их переопределить. Сделайте 'phpinfo()' в своем скрипте непосредственно перед критическими частями, чтобы увидеть, можете ли вы переопределить. '(Выделенное 30670848)' является диагностикой - в точке, где происходит ошибка, ограничение памяти составляет 30 миллионов, а сценарий умер, когда он пытался получить еще 14k в этой точке. –

Смежные вопросы