PHP max_input_vars

85

Я получаю max_input_varsсообщение об ошибке.

Я понимаю, что есть php.iniпараметр, который может изменить это, начиная с версии 5.3.9, однако я использую версию 5.1.6.

Когда я просматриваю информацию о конфигурации своего сервера 5.1.6, он показывает max_input_varsзначение 1000.

У меня вопрос: хотя я использую 5.1.6, я вижу этот параметр, phpinfo()но его нет в php.iniфайле. Означает ли это, что значение жестко запрограммировано в этой версии PHP и не может быть изменено?

user39653
источник
2
Я вообще не вижу ссылок max_input_varsна них в исходном коде PHP 5.1.6, поэтому я не уверен, как вы видите это в выводе phpinfo (). Насколько я знаю, до 5.3.9 его не было ...
drew010
2
Многие параметры имеют жестко заданные значения по умолчанию, но вы все равно можете присвоить новое значение. Тот факт, что что-то явно не установлено в php.ini, не означает, что вы не можете использовать php.ini для его изменения.
octern
Какое сообщение об ошибке вы получите? Пожалуйста, добавьте это к своему вопросу.
hakre
Я столкнулся с этой ошибкой после обновления с 5.1.6 -> 5.3.3, а затем возврата на 5.1.6. Выкинул меня, потому что такой опции нет в 5.1.6 php.iniфайле. Я добавил строку, увеличил число, и моя ошибка / проблема исчезла.
JoshP

Ответы:

48

Вы можете добавить его в php.ini, и он должен работать - просто протестировал его на PHP 5.3.6.

Нарф
источник
Спасибо, это стоит знать, хотя я на 5.3.3 и без радости.
Vaughany 05
спасибо за этот очевидный указатель, серьезно - я искал этот параметр в течение часа .... пока я не увидел это, добавьте его фиктивным!
jamesTheProgrammer
1
@Vaughany Обратите внимание, что если вы находитесь в стеке битнами, вам придется перезапустить php-fpm, если вы его используете. Простой перезапуск apache не поможет и может даже не потребоваться после внесения изменений в /opt/bitnami/php/etc/php.ini
Шреник
101

Ссылка в сети PHP:

http://php.net/manual/en/info.configuration.php#ini.max-input-vars

Обратите внимание, вы не можете установить эту директиву во время выполнения с функцией ini_set(name, newValue), например

ini_set('max_input_vars', 3000);

Он не будет работать.

Как объясняется в документации, эта директива может быть установлена ​​только для области каталогов, что означает через файл .htaccess, httpd.conf или .user.ini (начиная с PHP 5.3).

См. Http://php.net/manual/en/configuration.changes.modes.php

Добавление директивы в php.ini или размещение следующих строк в .htaccess будет работать:

php_value max_input_vars 3000
php_value suhosin.get.max_vars 3000
php_value suhosin.post.max_vars 3000
php_value suhosin.request.max_vars 3000
Любосдз
источник
3
Или размещение всех трех директив suhosin на php.ini - это нормально.
Ален Тьембло
1
Если у вас есть доступ к php.ini, синтаксис директивы max_input_vars = 3000(+ знак равенства).
Parapluie
@ Shortif2000 У меня была аналогичная проблема в IIS, PHP 7 с wincache, используя файл .user.ini. Первой проблемой был кеш. Я перемещал строки в произвольном порядке в .user.ini, пока, наконец, не заработал. Вторая проблема: изменение 1000 на 2000 не повлияло, но когда я переместил всю строку на другую строку, это сработало.
Райан Брисколл
20

Только что попробовали это исправить с помощью 5.3.3, и нет никаких изменений. Погуглил, я нашел эту веб-страницу http://anothersysadmin.wordpress.com/2012/02/16/php-5-3-max_input_vars-and-big-forms/ с подробным описанием других настроек, которые необходимо изменить, если ваш сервер использует патч Suhosin что делает Apache под Debian.

На сайте поясняется:

Итак, если вы хотите увеличить это число, скажем, до 3000 с числа по умолчанию, равного 1000, вы должны ввести в свой php.ini следующие строки:

max_input_vars = 3000 suhosin.post.max_vars = 3000 suhosin.request.max_vars = 3000

Я протестировал его (добавил настройки в php.ini как в / etc / php5 / apache2, так и в / etc / php5 / cli, и успешно перезапустил Apache), но до сих пор нет переменной max_input_vars в phpinfo.

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

Vaughany
источник
9

Вам нужно раскомментировать значение max_input_vars в файле php.ini и увеличить его (exp. 2000), также не забудьте перезагрузить сервер, это поможет на 99,99%.

Олег Сапищук
источник
У меня это не сработало на Ubuntu 12.04. Установил 3000 и использовал sudo service apache2 restart. Мне нужно перезапустить Ubuntu?
motorbaby
@motorbaby, если у вас это значение было закомментировано в php.ini, то у вас оставалось только раскомментировать и перезапустить службы. Перезагрузка ОС не нужна, но можно сделать, но смысла в этом не вижу. Если у вас его не было, используйте решение @ lubosdz. Если и то, и другое не поможет, проверьте, делаете ли вы изменения в нужном месте, например, у вас есть несколько файлов php.ini. Также вы можете попробовать просто использовать «sudo service apache2 reload» для перезагрузки конфигураций
Олег Сапищук
Линия была там. Я удалил ;и изменил значение на 3000. Вероятно, проблема заключалась в кеше браузера. Закрыл PHPMyAdmin и открыл в новой вкладке, и теперь он работает. Благодаря!
motorbaby
7

Сейчас 2018 год, и я просто застрял на этой проблеме, когда мне нужно отправить запрос, превышающий max_input_vars. И я придумал решение, которое новичок, как я, забыл перезапустить службу php fpm после изменения max_input_varsпараметра. потому что я только пытался перезапустить apache2службу, но не php fpm

  1. раскомментируйте код /etc/php/7.0/fpm/php.iniи установите номер по своему желанию
    max_input_vars = 4000
  2. перезапустите службу php fpm, так как я использую php 7. Поэтому
    sudo service php7.0-fpm restart

Надеюсь, это поможет
протестировать Debian Stretch,php7.0

nokieng
источник
Я потратил целый день, пытаясь понять, как обеспечить применение изменений, и прочитал так много решений. Все они упоминали, что после внесения изменений в php.ini вы должны перезапустить apache, что не имело значения. Перезапуск php7.2-fpm, как указано в этом решении, решил проблему!
nightrain
3

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

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

Его обязательно нужно настроить в php.ini

Луис Фарфан
источник
3

Обратите внимание, что вы должны поместить это в файл «.user.ini» в Centos7, а не в «php.ini», который раньше работал в Centos6. Вы можете поместить ".user.ini" в любой подкаталог, чтобы воздействовать только на этот каталог.

.user.ini:

max_input_vars = 3000

Протестировано на Centos7 и PHP 5.6.33.

Гэри Самад
источник
2

php_value max_input_vars 6000

«Поместите эту строку в файл .htaccess вашего сайта».

Рахул К.А.
источник
0

Новый блок Cpanels для просмотра файла .htaccess или если вы добавите .user.ini, вы не сможете его увидеть. но с небольшим взломом вы можете заставить его работать. Отредактируйте, например, wp-config.php и в строке URL замените wp-config.php на .htaccess, теперь вы можете вставить значения и сохранить их. введите описание изображения здесь

Себастьян Хей
источник
0

Просто была такая же проблема с добавлением пунктов меню в Wordpress. Я использую Wordpress 4.9.9 на Ubuntu 18.04, PHP 7.0. Я просто раскомментировал следующую строку и увеличил ее до 1500 в/etc/php/7.0/apache2/php.ini

; How many GET/POST/COOKIE input variables may be accepted<br>
max_input_vars = 1500

Затем применили следующее для изменения:

sudo apache2ctl configtest  #(if it does not return ok Apache will not start)
sudo service apache2 reload

Надеюсь, это поможет.

MagicMartinian
источник
0

"Сообщение PHP: Предупреждение PHP: Неизвестно: Входные переменные превысили 1000. Чтобы увеличить лимит, измените max_input_vars в php.ini.

Этот параметр конфигурации php max_input_vars будет влиять не только на ваши параметры GET / POST / COOKIES, он также контролирует любой ввод формы.

Чтобы установить или изменить его значение, выполните следующие действия.

1) проверьте существующий параметр / значение, просмотрев его в файле php.ini. Найдите файл php.ini с помощью

<?php echo getinfo(); ?>

найдите ниже ключ: Загруженный файл конфигурации: /etc/php/5.6/fpm/php.ini

2) Откройте файл php.ini в редактируемом режиме и выполните поиск max_input_vars. Эта строка может быть прокомментирована в существующей настройке по умолчанию со значением по умолчанию 1000, поэтому удалите; чтобы раскомментировать его и отредактировать, указав подходящее значение, например 2500.

3) Сохраните файл и перезапустите службы PHP, используя ниже sudo service php5.6-fpm restart

Точно так же вы можете обновить любую другую аналогичную конфигурацию PHP для вашего удобства.

Патель Нихил
источник
0

Просто чтобы дополнить. На общем сервере с использованием mod_suphp у меня была такая же проблема.

Объявление 4 переменных max_input_vars (включая suhosin) не решило эту проблему, просто продолжалось усечение на 1000 переменных (по умолчанию), а объявление «php_value max_input_vars 6000» в .htaccess привело к ошибке 500.

Решением было добавить следующее в .htaccess, который рекурсивно применяет файл php.ini к этому пути

suPHP_ConfigPath /home/myuser/public_html
Даниэль
источник
-6

Да, добавьте его в php.ini, перезапустите apache, и он должен работать.

Вы можете протестировать его на лету, если хотите, с ini_set("max_input_vars",100)

Куэйд
источник
8
Это не сработает, см. Php.net/manual/en/info.configuration.php . Должен быть установлен для виртуального хоста каталога или для htaccess, а не для ini_set.
lubosdz 06
Мы можем установить эту переменную с помощью функции ini_set. Почему этот ответ получил голоса? php.net/manual/en/info.configuration.php
Ахмад