Неустранимая ошибка PHP: недостаточно памяти (выделено 80740352) (попытка выделить 12352 байта) в - PullRequest
6 голосов
/ 11 июня 2011

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

сообщение об ошибке: «Неустранимая ошибка PHP: недостаточно памяти (выделено 80740352) (попытка выделить 12352 байта) в / home .......» Как я могу это исправить с помощью php.ini?

Вот мои текущие настройки загрузки php.ini

upload_max_filesize = 2000M ;
post_max_size = 2000M
max_file_uploads = 8

Любые идеи, что еще мне нужно добавить, чтобы решить эту ошибку?

Ответы [ 4 ]

10 голосов
/ 20 июля 2011
set_time_limit(0);
ini_set('memory_limit', '20000M');

В начало вашего скрипта. Измените 20000M соответственно.

9 голосов
/ 11 июня 2011

Оптимальное значение memory_limit зависит от того, что вы делаете с загруженными файлами. Вы читаете файлы в память, используя file_get_contents или библиотеку GD? В этом случае увеличьте memory_limit, по крайней мере, до той же, что и upload_max_filesize, предпочтительно больше.

Если вы используете GD, имейте в виду, что GD хранит все изображения в памяти без сжатия. Это означает, что он занимает память в диапазоне width * height * bit-depth, например, 1024*768*32 = 25 165 824 bits = 3 MB для снимка экрана или целых 55 МБ для 14-мегапиксельного изображения.

Некоторым операциям может потребоваться создать копию изображения, поэтому рассмотрите возможность установки memory_limit в два раза больше, чем нужно, чтобы сохранить изображение в памяти. Также убедитесь, что не загружаете все изображения в память сразу, если это не нужно. Вы можете освободить память, используемую GD, вызвав imagedestroy на дескрипторе, когда закончите работу с изображением.

2 голосов
/ 11 июня 2011

Увеличьте лимит памяти с php.ini

 memory_limit = ...
0 голосов
/ 11 июня 2011

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

memory_limit = 2000M // better 2200M or above, just in case.
...