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

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

Способ #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.ini рекомендуем изменить и эти параметры

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

Настройка файла php.ini | REG.RU

В статье мы рассмотрим основные директивы, которые могут пригодиться, чтобы настроить php.ini.

php.ini — это конфигурационный файл PHP. Синтаксис настроек этого файла прост:

Имя_настройки = Значение_параметра

Параметры чувствительны к регистру. Строки, которые начинаются с точки с запятой (;), игнорируются.

Обратите внимание! Чтобы избежать ошибок, не добавляйте новые строки. Ищите уже существующие и изменяйте значения на нужные.

Директивы для настройки использования ресурсов

Чтобы сервер не перегружался и мог нормально работать, в PHP устанавливаются ограничения для использующихся ресурсов. Иногда стандартные параметры не подходят для проекта и нужно сделать изменение php.ini.

  1. Время выполнения скрипта. По умолчанию максимальное время выполнения скрипта ― 30 секунд. Чтобы установить другое, введите:

    max_execution_time = 60

    Где 60 ― количество секунд выполнения скрипта.

    Если указать 0, скрипт будет выполняться бесконечно.

  2. Максимальное время (в секундах), которое может потратить скрипт для обработки загружаемых данных. Для этого используйте директиву:

    max_input_time = 30
  3. Объём памяти для одного скрипта (в МБ). Чтобы установить максимальный размер памяти, который может использовать один скрипт, введите:

    memory_limit = 128m

    Где 128 ― максимальный объём памяти в MБ.

  4. Максимальный объём памяти, который может использовать один скрипт во время своего выполнения. Чтобы настроить, введите:

    memory_limit = 128M

    Где 128 ― объём памяти в МБ.

  5. Максимальное количество переменных в GET и POST. Для этого введите директиву:

    max_input_vars = 1000

    Где 1000 ― количество переменных.

  6. Максимальный размер данных, который передаётся в POST-запросе. По умолчанию выставлен параметр ― 8 МБ. Чтобы его изменить, введите:

    post_max_size = 9M

    Где 9 ― максимальное количество МБ.

  7. Ограничение области действия PHP в системе. Можно указать папку, выше которой скрипт не может получить доступ к файловой системе:

    open_basedir = /var/www/

    Где /var/www/ ― ограничивающая папка.

Директивы для вывода ошибок

По умолчанию во время выполнения скрипта функция вывода ошибок на экран отключена. Поэтому, чтобы выводить сообщения об ошибках вместе с остальным выводом PHP-скрипта, включите опцию display_errors. Для этого введите:

display_errors = On

В PHP есть разные виды ошибок: критические, ошибки синтаксиса и другие. Можно включить вывод только важных для вас типов ошибок. Для этого введите:

error_reporting = E_ALL

Где E_ALL ― вид ошибки, например E_ERROR, E_PARSE, E_CORE_ERROR, E_CORE_WARNING, E_COMPILE_ERROR, E_COMPILE_WARNING, E_USER_ERROR , E_USER_WARNING, E_USER_NOTICE.

Чтобы объединить несколько типов ошибок, используйте символ &. Например:

error_reporting = E_ALL & ~E_WARNING

Чтобы включить запись PHP-ошибок в лог, введите:

log_errors = On

Если есть повторяющиеся ошибки в рамках одного исполнения, их можно игнорировать. Для этого введите:

ignore_repeated_errors = On

Директивы для загрузки файлов

Часто нужно дать возможность пользователю загружать свои файлы на сервер (фото, документы, музыку). Чтобы включить эту функцию нужна настройка php.ini. Введите:

file_uploads = On

Если вы, наоборот, хотите запретить загрузку файлов, введите:

file_uploads = Off

Если нужно установить максимальный размер загружаемого файла (в МБ), введите:

upload_max_filesize = 2M

Если нужно установить максимальное количество файлов, которое может загрузить один скрипт, введите:

max_file_uploads = 20

Директивы для обработки данных

Чтобы установить порядок регистрации переменных, введите:

variables_order = "GEPSC"

Где GEPSC ― нужная вам последовательность.

Значение:

  • GET ― G,
  • POST ― P,
  • Cookie ― C,
  • Environment ― E
  • Server ― S.

Чтобы разрешить или запретить создание переменных argv и argc на основе информации, полученной методом GET, введите:

register_argc_argv = On

или

register_argc_argv = Off

Чтобы включить или отключить автоматическую обработку кавычек и апострофов в GET, POST и Cookie, введите:

magic_quotes_gpc = On

или

magic_quotes_gpc = Off

Помогла ли вам статья?

Да

1 раз уже
помогла

Настройки PHP.ini · Документация Platform.sh

Существует два способа настройки значений php.ini для вашего приложения. Рекомендуемый метод — использовать свойство

переменных . из .platform.app.yaml для установки значений ini с использованием префикса php . Например, чтобы увеличить лимит памяти PHP, вы должны поместить в переменные .platform.app.yaml :

 следующее:
    php:
        memory_limit: "256M"
 

Также возможно изготовление по индивидуальному заказу php.ini в репозитории в корне вашего приложения.

 ; php.ini
; Увеличьте лимит памяти PHP
memory_limit = 256M
 

Другим примером является установка часового пояса среды выполнения PHP (хотя настройки часового пояса контейнеров/служб останутся в формате UTC):

 переменных:
    php:
        date.timezone: "Европа/Париж"
 

или

 ; php.ini
; Установить часовой пояс времени выполнения PHP
date.timezone = "Европа/Париж"
 

Зависящие от среды Директивы конфигурации php.ini могут быть предоставлены через переменные среды отдельно от кода приложения. См. примечание о переменных среды.

Отключение функций 

Распространенной рекомендацией для обеспечения безопасности установки PHP является отключение определенных встроенных функций, которые часто используются при удаленных атаках.

По умолчанию Platform.sh не отключает какие-либо функции, поскольку все они находят законное применение в различных приложениях. Вы можете отключить их самостоятельно, если знаете, что они не нужны. Например, чтобы отключить pcntl_exec и pcntl_fork (которые в любом случае нельзя использовать в веб-запросе):

 переменные:
    php:
        disable_functions: "pcntl_exec,pcntl_fork"
 

Общие функции для отключения включают:

  • create_function create_function
    не имеет полезного назначения, начиная с PHP 5.3, и не должен использоваться. Он был эффективно заменен анонимными функциями.
  • exec,passthru,shell_exec,system,proc_open,popen — все эти функции позволяют сценарию PHP запускать команду оболочки bash. Это редко используется веб-приложениями, хотя они могут понадобиться скриптам сборки.
  • pcntl_exec,pcntl_fork,pcntl_setpriority — Функции pcntl_* (включая не указанные здесь) отвечают за управление процессами. Большинство из них вызывают фатальную ошибку при использовании в веб-запросе. Задачи Cron или рабочие могут их использовать. Большинство из них можно безопасно отключить, если вы не знаете, что используете их.
  • curl_exec,curl_multi_exec — эти функции позволяют сценарию PHP выполнять произвольные HTTP-запросы. Обратите внимание, что они часто используются другими библиотеками HTTP, такими как Guzzle, и в этом случае вам следует , а не отключить их.
  • show_source — Эта функция показывает версию с выделенным синтаксисом именованного исходного файла PHP. Это редко бывает полезно вне разработки.

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

Настройки php.ini по умолчанию 

Значения по умолчанию для некоторых часто изменяемых настроек php.ini перечислены ниже.

  • memory_limit=128M

  • post_max_size=64M

  • upload_max_filesize=64M

  • display_errors=Вкл.

    Это значение включено по умолчанию, чтобы упростить настройку проекта на Platform.sh. Настоятельно рекомендуется предоставить собственный обработчик ошибок в вашем приложении или установить для этого значения значение

    Off , прежде чем вы запустите свой сайт.

  • zend.assertions=-1

    Утверждения оптимизированы и не влияют на время выполнения. У вас должны быть установлены утверждения на 1 для вашей локальной системы разработки.

  • opcache.memory_consumption=64

    Количество мегабайт, доступное для OPcache. Большие приложения с большим количеством файлов могут захотеть увеличить это значение.

  • opcache.validate_timestamps=Вкл.

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

Примечание

Вы не ограничены в том, что вы можете поместить в файл php.ini , но многие настройки могут нарушить работу вашего приложения. Это средство для продвинутых пользователей.

Что такое php.ini? | Поддержка Hostgator

  • Обзор
  • Доступные версии PHP
  • Как обновить PHP
  • Исправлена ​​ошибка Multiphp
  • PHP.Ini
  • Limits
  • . . Здесь вы объявляете об изменениях в настройках PHP. На сервере уже настроены стандартные настройки PHP, которые ваш сайт будет использовать по умолчанию. Если вам не нужно изменять один или несколько параметров, нет необходимости создавать или изменять файл php.ini. Если вы хотите внести какие-либо изменения в настройки, сделайте это через Редактор MultiPHP INI .

    • Как изменить настройки PHP
    • Как создать новый файл php.ini

    Как изменить настройки PHP 

    с помощью редактора MultiPHP INI Editor

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

    Чтобы изменить настройки PHP:

    1. Войдите в cPanel.
    2. В разделе Программное обеспечение щелкните значок MultiPHP INI Editor .

    3. На странице редактора MultiPHP INI выберите Домашний каталог или конкретный домен, который вы хотите обновить, из раскрывающегося списка Настройка основных параметров PHP INI .

    4. Выберите новый параметр для каждой директивы PHP, которую вы хотите изменить.

    5. Нажмите Применить внизу, чтобы сохранить изменения.

    Как создать новый файл php.ini

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

    • Для пользователей Plesk файл уже должен существовать в каталоге /var/www/vhost/$DOMAIN/etc/php.ini.
    • Для cPanel этот файл должен быть создан в вашем домашнем каталоге ( /дом/имя_пользователя/ ).

    Имя пользователя — это ваше фактическое имя пользователя cPanel, а $DOMAIN — ваш фактический домен.

    Чтобы создать новый файл php.ini в cPanel:

    1. В разделе Files cPanel щелкните значок File Manager .

    2. Выберите корневой каталог для вашего сайта. Значение по умолчанию для основного — public_html .
    3. Нажмите кнопку + Файл в левом верхнем углу страницы.

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

    5. Щелкните Создать новый файл.