Как изменить допустимое количество выделенной памяти? - PullRequest
0 голосов
/ 04 января 2010

Неустранимая ошибка: допустимый объем памяти 33554432 байта исчерпан (попытка выделить 40000 байтов) в / mount-storage / home20a / sub001 / sc20063-GJYD / [...] в строке 62

Похоже, PHP-скрипт позволяет мне выделить только 32 МБ памяти? Это было с примером изображения , чтобы проверить, что произойдет, если пользователь попытается загрузить огромную картинку.

Мой вопрос: как я могу предсказать, что это произойдет, и затем предупредить пользователя, что изображение было слишком большим, вместо того, чтобы возвращать эту ошибку? Прошло много времени с тех пор, как я его протестировал, но я думаю, что попробовал и try-catch, и @, но они оба потерпели неудачу, поскольку это фатальная ошибка. Размер примера изображения составляет всего 1 кБ, поэтому проверка этого значения не работает.


Я думаю, что решил свою собственную проблему, я могу проверить $ width и $ height изображения, а затем уведомить пользователя, если изображение слишком велико, но у меня есть другой вопрос: как мне изменить разрешенное количество выделенная память? Я предполагаю, что мои пользователи попытаются опубликовать много изображений с высоким разрешением. Я пытался ini_set("memory_limit", $bignumber), но он не работает.

Ответы [ 6 ]

1 голос
/ 04 января 2010

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

«Я думаю, что решил свою собственную проблему, я могу проверить $ width и $ height изображения»,

gd getimagesize вернет значения, которые приведут карту к использованию памяти растровым изображением в GD, однако вам, возможно, следует подумать об ограничении размера загрузки и максимального размера сообщения до того, как файл попадет в PHP

C.

1 голос
/ 04 января 2010

Вы также можете редактировать допустимый объем памяти через ini_set, но безопасный режим или исправление suhoshin могут заблокировать его . Установите необходимый объем памяти в php.ini с помощью директивы memory_limit.

1 голос
/ 04 января 2010

Чтобы изменить memory_limit, вам нужно отредактировать директиву memory_limit в файле php.ini - это можно сделать и в VirtualHost вашего Apache, если вы не хотите изменение должно быть эффективным для всего вашего сервера, но только для одного сайта.

Но вы не всегда можете это делать - вам нужно быть администратором вашего сервера ...

Кстати, вы можете взглянуть на Как изменить настройки конфигурации .


Другой возможностью может быть использование imagemagick и его исполняемого файла convert с использованием одной из функций выполнения программы . Таким образом, изменение размера вашего изображения не будет выполняться PHP.

Но здесь это означает, что вы зависите от внешней программы ...

0 голосов
/ 04 января 2010

Попробуйте с

ini_set("memory_limit","50M");

Возможно, ваш $bignumber не указан в мегабайтах (отсюда и М).

0 голосов
/ 04 января 2010

Отредактируйте настройку в своем PHP.ini или вы также можете использовать .htaccess (если не на хостинге Windows) со следующей строкой в ​​нем:

php_value memory_limit 32M

Решение .htaccess может помочь вам, если у вас нет доступа к php.ini или если вы хотите изменить этот параметр в определенной области вашего сайта. В моем примере предел увеличен до 32 МБ. Обратите внимание, что некоторые хосты не поддерживают это или не поддерживают очень большие значения (особенно в средах с общим хостингом).

0 голосов
/ 04 января 2010

Это необходимо сделать в файле конфигурации php.ini: memory_limit.

...