Неустранимая ошибка: допустимый размер памяти 33554432 байт исчерпан (пытался выделить 40000 байт) в / mount-storage / home20a / sub001 / sc20063-GJYD / […] в строке 62
Похоже, PHP-скрипт позволяет мне выделить 32 Мб памяти? Это было с примером изображения, чтобы проверить, что произойдет, если пользователь попытается загрузить огромную картинку.
Мой вопрос: как я могу предсказать, что это произойдет, а затем предупредить пользователя о том, что изображение слишком велико, вместо того чтобы возвращать эту ошибку? Его время, прошедшее с тех пор, как я его протестировал, но я думаю, что попробовал оба try-catch и @, но они оба потерпели неудачу, поскольку это фатальная ошибка. Размер примерного изображения составляет всего 1 кБ, поэтому он не будет проверять это значение.
Я думаю, что я решил свою проблему, я могу проверить ширину $ width и $ height изображения, а затем уведомить пользователя, если изображение слишком велико, но у меня есть другой вопрос: как изменить разрешенную память выделенной памяти? Я предполагаю, что мои пользователи попытаются опубликовать много изображений с высоким разрешением. Я пробовал ini_set("memory_limit", $bignumber)
, но он не работает.
Чтобы изменить memory_limit
, вам нужно отредактировать директиву memory_limit
в файле php.ini – это может быть сделано и в VirtualHost вашего Apache, если вы не хотите, чтобы изменения были эффективными для всего вашего сервера, но только для один веб-сайт.
Но вы не всегда можете это сделать – вам нужно быть администратором вашего сервера …
BTW, вы можете посмотреть, как изменить настройки конфигурации .
Другой возможностью может быть использование imagemagick и его конвертируемый исполняемый файл с использованием одной из функций выполнения программы . Таким образом, изменение размера изображения не будет производиться с помощью PHP.
Но, здесь, это означает, что вы зависите от внешней программы …
Вы также можете редактировать разрешенный размер памяти через ini_set, но безопасный режим или патч suhoshin могут заблокировать его . Задайте необходимый размер памяти в php.ini в директиве memory_limit.
Если вы хотите увеличить лимит памяти, это нужно сделать до запуска интерпретатора (т. Е. Вам нужно изменить его в файле php.ini – не используя ini_set).
«Я думаю, что я решил свою проблему, я могу проверить ширину $ и высоту изображения»,
gd getimagesize вернет значения, которые приведут карту к использованию памяти растрового изображения в GD, однако вы, вероятно, должны подумать об ограничении размера загрузки и максимального размера сообщения до того, как файл попадет на PHP
C.
Вам нужно сделать это в файле конфигурации php.ini
: memory_limit
.
Попробуйте
ini_set("memory_limit","50M");
Возможно, ваш $bignumber
не указан в мегабайтах (следовательно, M).
Измените настройку в вашем PHP.ini или вы также можете использовать .htaccess (если не на хостинге Windows) со следующей строкой:
php_value memory_limit 32M
Решение .htaccess может помочь вам, если у вас нет доступа к вашему php.ini или если вы хотите изменить этот параметр в определенной области вашего сайта. В моем примере ограничение увеличивается до 32 МБ. Обратите внимание, что некоторые хосты не поддерживают это или не будут поддерживать дополнительные большие значения (особенно в средах с общим хостингом).