Ограничения max_input_vars или почему не сохраняются настройки

10.0/10 оценка (2 голосов)

Max_input_vars — это количество входных переменных, которые могут быть приняты в одном запросе (ограничение накладывается на каждую из глобальных переменных $_GET, $_POST и $_COOKIE отдельно).

Использование этой директивы снижает вероятность сбоев в случае атак с использованием хеш-коллизий. Если входных переменных больше, чем задано директивой, выбрасывается предупреждение E_WARNING, и все последующие переменные в запросе игнорируются. Это ограничение применяется к каждому уровню вложенности входного многомерного массива.

В силу своих особенностей настройки, Zoo (и JBZoo) использует очень большие формы для работы с настройками сайта. К таким формам относятся редактирование полей материала, настройки позиций в шаблоне и импорт.

Если материалы используют большое количество элементов, есть вероятность, что сработают серверные ограничения — в нашем случае это max_input_vars. Они могут выглядеть как вылет на главную страницу панели управления. Либо форма просто не будет сохранять изменения.

Несколько способов уменьшить ограничения

Вам необходимо повысить значение предельного порога. Давайте рассмотрим на примере как это можно сделать. Для этого вам понадобиться либо обращаться к своему хост-провайдеру, либо сделать это самостоятельно.

Способ #1

Вам необходимо:

  1. Узнать, где расположен ваш файл php.ini, значения которого подтягиваются в конфигурацию. Зайдите в Систему > Информация о системе > Информация о PHP > строка Loaded Configuration File, например, со значением /usr/local/lib/php.ini.

  2. Перейдите на сервер и откройте этот файл для редактирования.

  3. Найдите параметр max_input_vars. А если его там нет, то добавьте значение max_input_vars = 5000.

  4. Перезагрузите сервер.

  5. Проверьте: Система > Информация о системе > Информация о PHP > max_input_vars должно измениться на указанный вами.

На скриншоте значения из вкладки Информация о PHP

Информация о PHP

Способ #2 (для тех у кого нет управления сервером)

Нужно сделать следующее:

  1. Зайдите в корень Joomla через файловый менеджер или FTP.

  2. Найдите и откройте файл «.htaccess» (иногда для этого нужно переименовать файл в htaccess.txt. Не забудьте потом переименовать обратно в .htaccess)

  3. Добавьте строчку php_value max_input_vars 5000.

  4. Сохраните и проверьте Система > Информация о системе > Информация о PHP > max_input_vars должно измениться.

Значения, которые можно указывать в ограничениях

Значения параметра max_input_vars напрямую зависят от масштабов вашей работы. Допустим, если значение по умолчанию в 1000 вас не устроило, то представьте планируемый объем работ и пропорционально увеличьте значение. Рекомендуем поставить 3000, но если вдруг в работе возникнут снова «вылеты» на главный экран Joomla — значит его нужно поднять выше, например, до 5000.

Как показывает практика, бывают случаи, когда на web-сервере установлен нестандартный(!) PHP-модуль — suhosin.

Это можно увидеть через phpinfo()

Нестандартный PHP-модуль

Для этого в php.ini рекомендуем изменить и эти параметры

max_input_vars = 20000
suhosin.get.max_vars = 20000
suhosin.post.max_vars = 20000
suhosin.request.max_vars = 20000

У меня остались вопросы, где я могу их задать?

Вы можете обратиться на наш специальный форум техподдержки JBZoo. Если у вас нет активного аккаунта со знаком «плюс» в тарифном плане, то вы можете задать свой вопрос в одном из этих разделов или на любой из наших контактов. Форум специально предназначен для JBZoo, приоритет и скорость ответа там выше.