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 і не може бути змінено?


2
Я взагалі не бачу жодного посилання max_input_varsна вихідний код PHP 5.1.6, тому я не впевнений, як ви це бачите у вихідних даних phpinfo (). Наскільки мені відомо, він не існував до 5.3.9 ...
draw010

2
У багатьох параметрах за замовчуванням встановлено жорстке кодування, але ви все одно можете призначити нове значення. Той факт, що щось явно не встановлено у php.ini, не означає, що ви не можете використовувати php.ini для його зміни.
вітер

Яке повідомлення про помилку ви отримуєте? Будь ласка, додайте його до свого запитання.
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

дякую за цей очевидний вказівник, серйозно - я шукав це налаштування протягом години .... поки я не побачив це, додайте манекен!
jamesTheProgrammer

1
@Vaughany Зауважте, що якщо ви перебуваєте в стеці bitnami, вам доведеться перезапустити 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
Або розміщення всіх 3 директив suhosin на php.ini - це нормально.
Ален Тіембло

1
Якщо у вас є доступ до php.ini, синтаксис директиви дорівнює max_input_vars = 3000(+ знак рівності).
Параплує

@ shorif2000 Я мав подібну проблему в 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.


9

Вам потрібно прокоментувати значення max_input_vars у файлі php.ini і збільшити його (термін дії 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

6

Зараз 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


Я витратив цілий день, намагаючись зрозуміти, як переконатися, що зміни застосовані, і прочитав стільки рішень. Усі вони згадували після внесення змін до php.ini, що вам слід перезапустити apache, що не мало значення. Перезапуск php7.2-fpm, як зазначено у цьому рішенні, вирішив проблему!
нічний дощ

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.



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

Сподіваюся, що це допомагає.


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 vars (за замовчуванням), а оголошення "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.03.13

Ми можемо встановити цю змінну за допомогою функції ini_set. Чому ця відповідь набрала голосів? php.net/manual/en/info.configuration.php
Ахмад
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.