memory_limit = 80M. Каков максимальный размер изображения для imagecreateformjpeg ()? - PullRequest
2 голосов
/ 01 августа 2010

У меня есть веб-хостинг, который дает максимальный предел памяти 80M (т.е. ini_set ("memory_limit", "80M");).Я использую загрузку фотографий, которая использует функцию imagecreatefromjpeg ();Когда я загружаю большие изображения, выдается ошибка «Неустранимая ошибка: допустимый объем памяти 83886080 байт исчерпан». Какой максимальный размер (в байтах) для изображения я могу ограничить для пользователей?или memory_limit зависит от какого-то другого фактора?

Ответы [ 2 ]

2 голосов
/ 01 августа 2010

Объем памяти 8388608 составляет 8 мегабайт, а не 80. Возможно, вы захотите проверить, можете ли вы еще где-нибудь увеличить значение.

Кроме этого, общее правило для манипулирования изображением состоит в том, что онопотребуется как минимум

image width x image height x 3 

байт памяти для загрузки или создания изображения.(Один байт для красного, один байт для зеленого, один байт для синего, возможно, еще один для альфа-прозрачности)

По этому правилу для изображения размером 640 x 480 пикселей потребуется не менее 9,2 мегабайта пространства - не считаянакладные расходы и пространство, занимаемое самим сценарием.

Невозможно определить ограничение на размер файла JPG в байтах , поскольку JPG является сжатым форматом с переменными степенями сжатия.Вам нужно будет выбрать разрешение изображения и установить ограничение на это.

Если у вас не так много доступной памяти, вы можете рассмотреть более эффективные методы выполнения того, что вы хотите, например, мозаику (обработка одной части изображения за один раз) или, если ваш провайдерпозволяет это, используя внешний инструмент, такой как ImageMagick (который также потребляет память, но выходит за пределы памяти PHP-скрипта).

0 голосов
/ 03 мая 2012

Вероятно, ваш скрипт использует больше памяти, чем просто само изображение. Попытка отладки вашего потребления памяти.

Один быстрый и грязный способ - использовать memory_get_usage и memory_get_usage memory_get_peak_usage в определенных точках вашего кода и особенно в пользовательском обработчике ошибок и shutdown_function . Это может дать вам знать, какие именно операции вызывают исчерпание памяти.

...