PHP max_input_vars

85

Recibo un max_input_varsmensaje de error.

Entiendo que hay una php.iniconfiguración que puede cambiar esto a partir de la versión 5.3.9, sin embargo, estoy ejecutando la versión 5.1.6.

Cuando veo la información de configuración de mi servidor 5.1.6, muestra que el max_input_varsvalor es 1000.

Mi pregunta es: aunque estoy ejecutando 5.1.6, veo esta configuración de phpinfo()pero no está en el php.iniarchivo. ¿Significa esto que el valor está codificado en esta versión de PHP y no se puede cambiar?

user39653
fuente
2
No veo ninguna referencia a max_input_varsen absoluto en el código fuente de PHP 5.1.6, así que no estoy seguro de cómo lo ve en la salida de phpinfo (). Hasta donde yo sé, no existía antes de 5.3.9 ...
drew010
2
Muchos parámetros tienen valores predeterminados que están codificados de forma rígida, pero aún puede asignar un nuevo valor. El hecho de que algo no esté configurado explícitamente en php.ini no significa que no pueda usar php.ini para cambiarlo.
2012
¿Qué mensaje de error recibe? Por favor agréguelo a su pregunta.
hakre
Me encontré con este error después de actualizar de 5.1.6 -> 5.3.3, luego degradar de nuevo a 5.1.6. Me tiró porque esa opción no existe en el 5.1.6 php.iniarchivo. Agregué la línea, aumenté el número y mi error / problema desapareció.
JoshP

Respuestas:

48

Puede agregarlo a php.ini y debería funcionar; solo lo probó en PHP 5.3.6.

Narf
fuente
Gracias, vale la pena saberlo, aunque estoy en 5.3.3 y no me alegro.
Vaughany
gracias por ese puntero obvio, en serio. Estuve buscando esta configuración durante una hora ... hasta que vi esto, ¡agréguelo ficticio!
jamesTheProgrammer
1
@Vaughany Tenga en cuenta que si está en la pila de bitnami, tendrá que reiniciar php-fpm en caso de que lo esté usando. Simplemente reiniciar apache no ayudará y es posible que ni siquiera sea necesario después de realizar un cambio en /opt/bitnami/php/etc/php.ini
Shrenik
101

Referencia en PHP net:

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

Tenga en cuenta que no puede configurar esta directiva en tiempo de ejecución con la función ini_set(name, newValue), por ejemplo

ini_set('max_input_vars', 3000);

No funcionará.

Como se explica en la documentación, esta directiva solo se puede configurar por alcance de directorio, lo que significa a través del archivo .htaccess, httpd.conf o .user.ini (desde PHP 5.3).

Ver http://php.net/manual/en/configuration.changes.modes.php

Agregar la directiva en php.ini o colocar las siguientes líneas en .htaccess funcionará:

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
lubosdz
fuente
3
O colocar las 3 directivas de suhosin en php.ini está bien.
Alain Tiemblo
1
Si tiene acceso a php.ini, la sintaxis de la directiva es max_input_vars = 3000(+ signo igual).
Parapluie
@ shorif2000 Tuve un problema similar en IIS, PHP 7 con wincache, usando el archivo .user.ini. El primer problema fue el caché. Moví las líneas en orden aleatorio, en .user.ini hasta que finalmente funcionó. Segundo problema, cambiar 1000 a 2000 no tuvo ningún efecto, pero cuando moví toda la línea a una línea diferente, funcionó.
Ryan Briscall
20

Acabo de intentar esta solución con 5.3.3 y no hay cambios. Buscando en Google encontré esta página web http://anothersysadmin.wordpress.com/2012/02/16/php-5-3-max_input_vars-and-big-forms/ que detalla otras configuraciones que deben cambiarse si su servidor usa el parche Suhosin que hace Apache bajo Debian.

El sitio explica:

Entonces, si desea aumentar este número a, digamos, 3000 desde el número predeterminado que es 1000, debe ingresar estas líneas en su php.ini:

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

Lo probé (agregué configuraciones a php.ini tanto en / etc / php5 / apache2 como / etc / php5 / cli, y reinicié Apache con éxito) pero aún no hay variable max_input_vars en phpinfo.

Algunos sitios apuntan a PHP 5.3.9 como la primera versión de PHP en la que tomará este cambio, por lo que mi culpa no es RTM correctamente en primer lugar, aunque estoy interesado en ver personas que informan que funciona en la versión anterior a 5.3.3 pero por debajo de 5.3.9.

Vaughany
fuente
9

Necesita descomentar el valor max_input_vars en el archivo php.ini y aumentarlo (exp. 2000), también no olvide reiniciar su servidor, esto ayudará en un 99,99%.

Oleg Sapishchuk
fuente
Esto no me funcionó en Ubuntu 12.04. Póngalo en 3000 y utilícelo sudo service apache2 restart. ¿Necesito reiniciar Ubuntu?
Motorbaby
@motorbaby, si tenía este valor comentado en php.ini, entonces solo tenía que descomentar y reiniciar los servicios. No es necesario reiniciar el sistema operativo, pero podría hacerse, pero no veo ningún sentido en esto. Si no lo tenía, utilice la solución @ lubosdz. Si ambos no ayudan, verifique si está haciendo cambios en el lugar correcto, por ejemplo, de alguna manera tiene varios archivos php.ini. También puede probar el uso de "sudo service apache2 reload" para recargar configuraciones
Oleg Sapishchuk
La línea estaba ahí. Eliminé ;y cambié el valor a 3000. Es probable que el problema fuera el caché del navegador. Se cerró PHPMyAdmin y se abrió en una nueva pestaña y ahora funciona. ¡Gracias!
motorbaby
6

Es 2018 ahora Y me quedé atascado en este problema cuando debo enviar una solicitud que excede el max_input_vars. Y se me ocurrió una solución que los novatos como yo se olvidó de reiniciar el servicio php fpm después de cambiar el max_input_varsparámetro. porque solo intenté reiniciar el apache2servicio, pero no php fpm

  1. descomenta el código en /etc/php/7.0/fpm/php.iniy establece el número que desees
    max_input_vars = 4000
  2. reinicie el servicio php fpm, ya que uso php 7. Por lo tanto,
    sudo service php7.0-fpm restart

Espero que ayude
Probado en Debian Stretch,php7.0

nokieng
fuente
Perdí un día completo tratando de averiguar cómo asegurarme de que se apliquen los cambios y leer tantas soluciones. Todos mencionaron que después de realizar cambios en php.ini, debería reiniciar Apache, lo que no marcó la diferencia. ¡Reiniciar php7.2-fpm como se indica en esta solución resolvió el problema!
tren nocturno
3

El uso de esta directiva mitiga la posibilidad de ataques de denegación de servicio que utilizan colisiones hash. Si hay más variables de entrada que las especificadas por esta directiva, se emite una E_WARNING y se truncan más variables de entrada de la solicitud.

Puedo sugerir no extender el valor predeterminado que es 1000 y extender la funcionalidad de la aplicación serializando la solicitud o enviando la solicitud por bloques. De lo contrario, puede extender esto a la configuración necesaria.

Definitivamente necesita configurarse en php.ini

Luis Farfán
fuente
3

Tenga en cuenta que debe poner esto en el archivo ".user.ini" en Centos7 en lugar de "php.ini" que solía funcionar en Centos6. Puede poner ".user.ini" en cualquier subdirectorio para afectar solo a ese directorio.

.user.ini:

max_input_vars = 3000

Probado en Centos7 y PHP 5.6.33.

Gary Samad
fuente
2

php_value max_input_vars 6000

"Coloque esta línea en el archivo .htaccess de su sitio".

Rahul KA
fuente
0

Nuevo bloque de Cpanels para ver el archivo .htaccess o si agrega un .user.ini no podrá verlo. pero con un pequeño truco puedes hacer que funcione. Edite, por ejemplo, wp-config.php y en la barra de URL reemplace wp-config.php por .htaccess ahora puede pegar los valores y guardarlos. ingrese la descripción de la imagen aquí

Sebastian Heye
fuente
0

Acabo de tener el mismo problema al agregar elementos de menú a Wordpress. Estoy usando Wordpress 4.9.9 en Ubuntu 18.04, PHP 7.0. Simplemente descomenté la siguiente línea y la aumenté a 1500 en/etc/php/7.0/apache2/php.ini

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

Luego usó lo siguiente para efectuar el cambio:

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

Espero que ayude.

MagiaMartiniana
fuente
0

"Mensaje de PHP: Advertencia de PHP: Desconocido: Las variables de entrada excedieron 1000. Para aumentar el límite, cambie max_input_vars en php.ini.

Este parámetro de configuración de php max_input_vars afectará no solo sus parámetros GET / POST / COOKIES sino que también controlará cualquier entrada de formulario.

Para establecer o cambiar su valor, siga los pasos a continuación.

1) verifique la configuración / valor existente viéndolo en su archivo php.ini Localice el archivo php.ini usando

<?php echo getinfo(); ?>

encuentre la siguiente clave: Archivo de configuración cargado: /etc/php/5.6/fpm/php.ini

2) Abra el archivo php.ini en modo editable y busque max_input_vars Esta línea puede ser comentada en su configuración predeterminada existente con el valor predeterminado de 1000, así que elimínelo; para descomentarlo y editarlo con su valor adecuado, por ejemplo, 2500.

3) Guarde el archivo y reinicie los servicios de PHP usando a continuación sudo service php5.6-fpm restart

Del mismo modo, puede actualizar cualquier otra configuración PHP similar a su gusto.

Patel Nikhil
fuente
0

Solo para complementar. En un servidor compartido usando mod_suphp estaba teniendo el mismo problema.

Declarar 4 max_input_vars (incluido suhosin), no lo resolvió, simplemente siguió truncando en 1000 vars (predeterminado), y declarando "php_value max_input_vars 6000" en .htaccess arrojó el error 500.

Lo que resolvió fue agregar lo siguiente en .htaccess, que aplica el archivo php.ini de forma recursiva a esa ruta

suPHP_ConfigPath /home/myuser/public_html
Daniel
fuente
-6

Sí, agréguelo a php.ini, reinicie Apache y debería funcionar.

Puede probarlo sobre la marcha si lo desea con ini_set("max_input_vars",100)

Quaid
fuente
8
Esto no funcionará, consulte php.net/manual/en/info.configuration.php . Debe configurarse por directorio de host virtual o htaccess, no ini_set.
lubosdz
Podemos establecer esta variable a través de la función ini_set. ¿Por qué esta respuesta obtuvo votos negativos? php.net/manual/en/info.configuration.php
Ahmad