Назад | Перейти на главную страницу

Переопределение memory_limit с помощью .htaccess, приводящее к появлению таинственных предупреждений в системном журнале (suhosin)

Версия 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