Версия PHP: PHP 5.3.10-1ubuntu3.4 with Suhosin-Patch (cli)
Используется в apache2 с: libapache2-mod-php5
Глобальные параметры memory_limit
для PHP установлено значение 512M
. Все идет нормально.
Теперь сценарий пытается выделить больше, но не работает из-за memory_limit. Все идет нормально.
Но теперь происходит странная вещь. Когда я создаю .htacess с php_value memory_limit "1025M"
в системном журнале есть ошибки только при запросе простого файла PHP с одним эхо.
21 сен, 18:14:02 ccollard2 suhosin [8611]: ALERT - сценарий попытался увеличить memory_limit до 1082130432 байта, что превышает допустимое значение (злоумышленник '*******', файл '/ home / www-data / ********* / bla / test.php ', строка 14)
НО когда я пытаюсь установить php_value на memory_limit "1024M"
на выходе ошибка не отображается. Поэтому я попытался проверить несколько конфигов suhosin для этого 1024M
предел и ничего не нашел.
Итак, мой первоначальный вопрос:
Почему сервер позволяет до 1024M
потребление памяти, даже если глобальная опция установлена на <1024M?
Я заверяю, что ни один файл конфигурации не отменяет глобальную опцию, а phpinfo () показывает глобально установленный предел памяти. Вопрос не в скрипте php. Это был просто тестовый сценарий.
**
Обновление: Suhosin, похоже, имеет значение по умолчанию 1024M памяти.
Таким образом, пользователь может установить memory_limit до 1024M с помощью htaccess, но без htaccess - обычный глобальный предел. Таким образом, с прокомментированным лимитом suhosin имеет невидимое ограничение в 1024, и пользователь может установить это ограничение вручную. Но без ручной настройки обычный глобальный лимит ограничит пользовательские скрипты.
Я нашел решение сейчас.
Глобально установленный memory_limit
действует как мягкий предел.
Предел сухосина - это жесткий предел. Ни один сценарий не может потреблять больше памяти, чем позволяет suhosin.
С лимитом suhosin равным 0, пользователь может установить лимит до 1024M, где suhosin говорит «больше не потребляет память».
Пока пользовательский сценарий определяет ограничение памяти с помощью "ini_set", он не может превышать мягкий предел, когда предел памяти suhosin равен 0. Но если suhosin установлен на определенное M-целое число, никакому сценарию не разрешено потреблять больше, чем говорит suhosin .
Резюме
Сухосин определяет максимальный предел памяти.
Обычный memory_limit
определяет лимит, который установлен по умолчанию и может быть перезаписан .htacces
/ini_set
. Сухосина suhosin.memory_limit = 0
или прокомментировал определяет 1024M.
Вы упоминаете .htaccess
- но ваши данные о публикации из CLI
версия PHP (PHP 5.3.10-1ubuntu3.4 with Suhosin-Patch (cli)
).
Если CLI
версия использует другую php.ini
(довольно часто) - вот почему вы не можете увидеть определенный 1024MB
Выполните следующее
php -i | grep -i php.ini
И сравните его с выводом файла через веб-браузер, содержащего следующие
<?php phpinfo();
Если путь к php.ini
отличается, вот ваш ответ, вы редактируете неправильно файл.
Существует особая настройка ограничения памяти, которая определяется (обычно) в /etc/php5/conf.d/20suhosin.ini
suhosin.memory_limit = 1024M