Muchos errores en WordPress tienen una causa silenciosa: la configuración php max input vars wordpress. Le mostraré cómo este valor límite corta la configuración, guarda los formularios de forma incompleta y ralentiza el rendimiento - y cómo establecer el valor correctamente.
Puntos centrales
Para empezar, resumiré brevemente los aspectos más importantes para que pueda reconocer rápidamente por dónde debe empezar.
- Valor límiteMax Input Vars define cuantas variables acepta PHP por petición.
- SíntomasOpciones de tema ausentes, formularios truncados, errores de plugin.
- AlojamientoLos valores maestros y los módulos de seguridad pueden anular los ajustes locales.
- Optimizaciónphp.ini, .htaccess o .user.ini con cuidado.
- Valores estándar3000 como mínimo, 5000-10000 para grandes montajes (fuente [1], [4]).
¿Qué es PHP Max Input Vars - y por qué afecta a WordPress?
El parámetro max_input_vars limita el número de variables POST y GET que PHP procesa en una única petición y, por tanto, sirve como protección contra formularios sobredimensionados e inundaciones de configuraciones. En una instalación típica de WordPress, las opciones de los paneles temáticos, los personalizadores, los widgets, los menús, los ajustes de los plugins y los campos de formulario suman rápidamente varios cientos de entradas, lo que provoca que los datos se trunquen si el límite es demasiado pequeño. Los creadores de páginas, los plugins de comercio electrónico y los formularios multinivel, en particular, aumentan el número, por lo que establezco un valor inicial de 3000 y considero de 5000 a 10000 para configuraciones extensas (fuente [1], [4]). Si también desea utilizar otros Límites de PHP demasiado estricto agrava la situación, porque entonces varios tornillos de ajuste actúan como frenos al mismo tiempo. Es importante adoptar un enfoque consciente: un valor demasiado bajo provoca una pérdida de datos silenciosa, mientras que un valor aumentado de forma razonable crea Estabilidad.
Patrones de error típicos en WordPress cuando el límite es demasiado bajo
Una primera señal de alarma es el almacenamiento incompleto de Opciones del temaHago clic en Guardar, pero sólo se conservan algunos de los ajustes, mientras que otros parecen “saltar hacia atrás”. Igual de críticos son los formularios grandes en los que desaparecen campos individuales sin dejar rastro porque PHP descarta las variables sobrantes y así los pedidos, registros o solicitudes de soporte llegan incompletos. En los menús con muchas entradas, desaparecen los cambios o la ordenación, que los operadores suelen atribuir erróneamente a los plugins. Los creadores de páginas pierden la configuración de módulos o widgets aunque el editor funcione correctamente, lo que dificulta el análisis de la causa. Cuando veo estos síntomas agrupados, compruebo inmediatamente el valor de max_input_vars, antes de seguir retocando plugins o temas.
Alojamiento de límites, valores maestros y módulos de seguridad
Aunque aumente los valores localmente, un Valor maestro del proveedor puede anular cada cambio, lo que es particularmente común en el alojamiento compartido. Escenario típico: pongo 5000 en mi php.ini, pero el servidor sólo acepta 1000 porque se aplica un límite global e ignora los ajustes locales. Módulos de seguridad adicionales como Suhosin introducen sus propios límites de entrada, que luego tengo que aumentar por separado, de lo contrario siguen bloqueando el exceso de campos a pesar de la correcta max_input_vars. Por lo tanto, en los casos persistentes, empiezo con una consulta al hoster para que me confirme el valor maestro efectivo y me indique los posibles módulos. Sólo cuando esta cadena está bien configurada surten efecto realmente los cambios locales continuo.
Diagnóstico: cómo encontrar rápidamente el cuello de botella
En caso de sospecha, primero abro el Estado del sitio web-page en el admin de WordPress y comprobar el valor activo real de max_input_vars, idealmente complementado por phpinfo() en un archivo de prueba. Si mis cambios difieren del valor mostrado, o bien un valor maestro está bloqueando o bien he cambiado la instancia equivocada (por ejemplo, un manejador PHP equivocado o un directorio equivocado). Como prueba, guardo un menú con muchas entradas o un formulario largo y observo si faltan entradas, lo que confirma el cuello de botella. Al mismo tiempo, me aseguro de borrar la caché de objetos o páginas y OPCache, de lo contrario las configuraciones antiguas seguirán siendo visibles. También tiene sentido echar un vistazo al Límite de memoria PHP, ya que los formularios de gran tamaño y las interfaces de los constructores requieren mucha memoria y un límite estricto en la interacción de más Efectos puede desencadenar.
Configuración en la práctica: cuatro formas fiables
Adopto un enfoque pragmático para la personalización: Primero pregunto al hoster y hago que se habilite el aumento en el lado del servidor, porque esto es lo menos propenso a errores y tiene en cuenta directamente los valores maestros. Con acceso root o administrado, edito php.ini, establezco un valor claro (alrededor de 5000) y reinicio el servicio PHP para que el cambio se active. En los sistemas Apache, puedo trabajar en el .htaccess, siempre que mod_php esté funcionando, y si Suhosin está activo, puedo aumentar sus límites. Sin acceso al php.ini central, utilizo un .user.ini en la raíz web, que funciona de forma fiable en muchos entornos gestionados. Luego verifico el cambio en WordPress y con phpinfo(); sólo cuando ambos son correctos pruebo guardando menús, formularios y Opciones.
; php.ini
max_input_vars = 5000
# .htaccess (sólo con mod_php)
php_value max_input_vars 5000
# Opcional para Suhosin:
php_value suhosin.request.max_vars 5000
php_value suhosin.post.max_vars 5000
; .user.ini
max_input_vars = 7000
Seleccione los valores: ¿Hasta qué punto es sensato?
Rara vez empiezo bajo 3000, porque las interfaces de administración modernas envían muchas variables incluso en funcionamiento básico (fuente [1]). Para sitios con creadores de páginas, muchos widgets, menús específicos de idioma o extensos paneles de plugins, establezco 5.000 como una pauta adecuada para el uso diario (fuente [4]). Para tiendas grandes de WooCommerce con productos variables, filtros y formularios de pago complejos, planifico entre 7.000 y 10.000 para dejar espacio para el crecimiento. Es importante probar paso a paso: después de cada aumento, compruebo las áreas problemáticas para no llegar demasiado alto, pero los errores desaparecen con seguridad. El objetivo es un valor que sea sostenible hoy y deje reservas para mañana sin aumentar innecesariamente otros límites. cepa.
Interacciones con plugins y temas
Observo que los plugins de caché o de rendimiento tienen su propio .htacceso-rules y, por tanto, anulan los valores establecidos previamente, razón por la cual compruebo de nuevo las directivas activas después de realizar cambios en dichas herramientas. Los creadores de páginas con módulos anidados aumentan enormemente la varianza, especialmente cuando se juntan opciones globales y relacionadas con la página. Los generadores de menús o las herramientas de importación envían muchos campos de una sola vez, lo que conduce inmediatamente a datos truncados si los límites son ajustados. Especialmente después de las actualizaciones de plugins, compruebo brevemente los efectos porque las nuevas funciones pueden traer consigo ajustes adicionales. Quien se queje de las grandes estructuras de navegación puede encontrar más información al respecto en Rendimiento del menú, porque los menús son reales Conductor variable.
Rendimiento y seguridad: el equilibrio justo
Un límite más alto significa que PHP tiene más Variables lo que puede significar más datos por solicitud, pero no conduce automáticamente a picos de carga. Sólo se vuelve crítico cuando se procesan regularmente formularios con miles de campos y, por tanto, suponen una mayor demanda de memoria y CPU. Por lo tanto, combino el aumento de max_input_vars con una mirada al tiempo de ejecución, el tamaño de la entrada y el límite de memoria para que el sistema global siga siendo coherente. En cuanto a la seguridad, el valor límite tiene sentido porque puede limitar las solicitudes erróneas o sobrecargadas intencionadamente; aquí se puede mantener un nivel seguro con la protección del proveedor, WAF y límites de velocidad. Por lo tanto, elijo un valor que cubra las necesidades reales sin maximizar ciegamente cada límite. ancho.
| Escenario | Variables típicas | max_input_vars | Nota |
|---|---|---|---|
| Sitio pequeño (blog, portafolio) | 200-800 | 3000 | Reserva suficiente para actualizaciones temáticas (fuente [1]) |
| Sitio multilingüe con Builder | 800-2500 | 5000 | Numerosos paneles y menús (fuente [4]) |
| WooCommerce con variantes | 2000-6000 | 7000-10000 | Posibilidades de pago y opciones de productos (fuente [1], [4]) |
| Formularios de empresa/CRM | 5000+ | 10000+ | Coordinarse estrechamente con el anfitrión, supervisando use |
Solución de problemas: los cambios no funcionan, ¿y ahora qué?
Si no cambia nada a pesar del ajuste, compruebo primero el activo Gestor PHP (mod_php, FPM, CGI), porque el contexto incorrecto hace que los archivos locales sean ineficaces. Luego comparo phpinfo() con WordPress Site Health para excluir las cachés y ver los valores efectivos. Si el valor sigue siendo obstinadamente bajo, casi siempre hay un valor maestro en el proveedor, que he confirmado por escrito y planteado. Con configuraciones FPM, puede que tenga que configurar el pool correcto o recargar el servicio, de lo contrario el valor antiguo permanece activo. Si Suhosin sigue bloqueando, aumento su request.max_vars y post.max_vars hasta que el Número de formularios pasa con seguridad.
Ejemplos prácticos y directrices que funcionan
Para la instalación de un blog con un tema estándar y algunos plugins, utilizo 3000, Pruebo los menús y las opciones del tema y suelo dejarlo así. Empiezo una web de empresa con mega menús, contenido multilingüe y un page builder directamente en 5000, lo que en la práctica aporta una tranquilidad notable. Un sistema de tienda más grande con variantes y campos adicionales comienza en 7000 y aumenta a 10000 si es necesario para que las importaciones de productos, las personalizaciones de pago y los paneles de administración funcionen correctamente. La relación con el tamaño real de los formularios y los paneles es más importante que el valor absoluto, por eso registro los cambios y controlo los picos de carga. Esto crea una configuración que está permanentemente Fiable y permite su posterior ampliación.
Cómo cuentan realmente las variables de PHP y por qué los constructores alcanzan sus límites tan rápidamente
Importante para la práctica: Cada campo del formulario corresponde al menos a una variable en $_POST o $_GET. WordPress utiliza a menudo para paneles complejos Sintaxis de matrices entre paréntesis, por ejemplo opción[grupo][subgrupo][campo]. PHP construye matrices anidadas a partir de él - y cada hoja en esta estructura cuenta contra max_input_vars. Los campos repetidos, las listas dinámicas, los mega menús y las variantes de traducción inflan el número con especial rapidez. A esto hay que añadir Campos ocultos (por ejemplo, nonces, ID) y parámetros sistémicos que los operadores pasan fácilmente por alto. Esto explica por qué un formulario con „sólo“ 300 entradas visibles puede generar internamente más de 1000 variables.
Los más afectados son:
- Editores de menús (cada elemento del menú tiene varios campos y metadatos)
- Creador de páginas con widgets anidados, opciones globales y de página
- Paneles opcionales de temas/plugins que transfieren árboles de configuración completos
- Configuraciones multilingües, donde los campos se duplican para cada idioma
Importante: max_input_vars limita el número de variables - no el Tamaño total de la consulta. Los límites de tamaño son post_max_size y tamaño máximo de archivo de carga responsable. Ambos deben coincidir con el incremento seleccionado para que las solicitudes no se cancelen en otro lugar.
Arquitecturas de servidor de un vistazo: Apache, NGINX, FPM, Contenedor
Que un cambio surta efecto y dónde lo haga depende en gran medida de la arquitectura. Un breve resumen que acorta mucho la resolución de problemas:
- Apache con mod_php:
.htaccesopuedephp_valuefijado. Tiene efecto inmediato, pero sólo en este contexto. - Apache + PHP-FPM (proxy_fcgi):
.htaccesoignoradophp_value. Los cambios se realizan enphp.ini,.usuario.inio en el Piscina FPM. - NGINX + PHP-FPM: Ninguno
.htacceso-archivos. Configuración mediantephp.ini,.usuario.inio FPM pool; NGINX por sí mismo no conoce el valor. - Contenedor/GestionadoCambios a menudo a través de la opción del panel, variable de entorno o montaje del archivo ini. Tras actualizaciones/despliegues, comprueba si los valores persisten.
En entornos FPM, me protejo introduciendo el valor directamente en el campo piscina y vuelva a cargar el servicio:
; /etc/php/8.2/fpm/pool.d/www.conf
php_admin_value[max_input_vars] = 7000
; Entonces: systemctl reload php8.2-fpm (o recargue el servicio apropiadamente)
Para .usuario.ini Los cambios no siempre se activan inmediatamente. En función de user_ini.cache_ttl pasan minutos hasta que los nuevos valores son visibles. Por lo tanto, preveo un tiempo de espera o una recarga del FPM. Señal de error: WordPress sigue informando del valor antiguo aunque el archivo esté correctamente localizado - entonces entra en vigor el TTL de la caché o se bloquea un valor maestro.
Importante: Fije php_value sólo en .htacceso, cuando mod_php está activa. En configuraciones FPM, esto suele provocar errores 500 porque el servidor web no entiende la directiva.
Medir en lugar de adivinar: Contar variables en vivo y simular cuellos de botella
Antes de aumentar el valor „por sospecha“, mido la demanda real. Un breve ayudante de diagnóstico como código temporal en un plugin imprescindible o funciones.php escribe el recuento en el registro:
<?php
// Advertencia: Usar sólo temporalmente y eliminar después.
add_action('admin_init', function () {
if (!empty($_POST)) {
// Recuento recursivo de todos los valores de la hoja
$count = 0;
$it = new RecursiveIteratorIterator(new RecursiveArrayIterator($_POST));
foreach ($it as $v) { $count++; }
error_log('POST vars (recursive): ' . $count);
error_log('max_input_vars (ini): ' . ini_get('max_input_vars'));
}
});
Esto me permite ver inmediatamente si un proceso de almacenamiento ha llegado a su límite. También hago pruebas con un „formulario de estrés“ (por ejemplo, campos ficticios generados) para comprobar que no desaparecen más campos tras un aumento. Importante: Vacíe las cachés para que el backend no siga mostrando estados antiguos.
Casos especiales: Multisitio, API REST, Ajax y cargas
En MultisitioLos ajustes de red, las opciones basadas en roles y las entradas específicas de idioma se acumulan especialmente rápido en las subredes. Yo planifico con valores más altos desde el principio y compruebo por subred porque los paneles pueden diferir considerablemente.
No todas las funciones de WordPress se ven afectadas por igual: API REST-a menudo envían JSON en el cuerpo de la solicitud, que no se reconoce como un archivo $_POST se analiza; max_input_vars no suele aplicarse en este caso. En cambio, la admin-ajax.php-requests (formularios POST) están claramente vinculados al límite. Así que si utilizas constructores que guardan a través de Ajax, todavía tienes que mantener un ojo en el límite.
Definido para la carga de archivos max_file_uploads el número máximo de archivos simultáneos, mientras que tamaño máximo de archivo de carga y post_max_size establecen los límites de tamaño. Si las cargas superan estos valores, se producen errores independientemente de max_input_vars. En entornos restrictivos, también pueden intervenir los límites del servidor web o WAF (por ejemplo, los límites del cuerpo de la solicitud), una razón típica para que las solicitudes se cancelen „de repente“ a pesar de que los valores de PHP estén correctamente configurados.
Prevención de errores a nivel de código: cuando el incremento por sí solo no basta
Desde el punto de vista de un desarrollador, a menudo es sensato dividir las configuraciones grandes en Subsecciones o para guardarlas paso a paso. Los siguientes patrones reducen la avalancha de variables:
- Paginación/PasosDividir los formularios largos en pasos y guardar cada paso en el servidor.
- ChunkingDivida grandes matrices de opciones en bloques y transfiéralos uno tras otro mediante Ajax.
- Almacenamiento diferencialEnviar sólo los campos modificados en lugar de todo el árbol de opciones.
- Almacenamiento en serieUtilice una opción estructurada con serialización en lugar de muchos campos individuales (limita el número de variables al enviar).
Estas pautas minimizan la dependencia de max_input_vars y hacer más sólidos los procesos de administración, especialmente en entornos con límites estrictos de proveedores.
Buenas prácticas y lista de control para las operaciones en curso
- Medir antes de elevarRegistrar el número de variables para acciones críticas (guardar menú, guardar página del constructor).
- Aumento de etapasAumente en pasos sensibles (3000 → 5000 → 7000) y compruebe después de cada paso.
- Comprobar arquitecturaVerifique el manejador (mod_php/FPM/CGI) y use la ruta apropiada (php.ini, .user.ini, FPM pool).
- Confirmar valor maestro: Pida al proveedor el valor límite global y hágalo documentar.
- Sincronizar módulos de seguridad: Sube Suhosin y límites comparables en paralelo.
- Versionar la configuraciónIncluya archivos ini/pool en los procesos de despliegue para que las actualizaciones no restablezcan los valores.
- Cachés vacíasInvalidar caché de objetos, caché de páginas y OPCache después de los cambios.
- Los límites de tamaño de un vistazo: post_max_size, tamaño máximo de archivo de carga, max_file_uploads, tiempo_de_ejecución_máximo y límite_de_memoria afinar adecuadamente.
- Establecer la supervisiónCompruebe los registros para ver si hay procesos de guardado „truncados“ recurrentes y errores de administración.
Escenarios de prueba prácticos que revelan rápidamente problemas ocultos
En las auditorías, realizo tres pruebas cortas: 1) Guardar un menú extenso con ordenación; 2) Duplicar una página del constructor con muchos widgets/repetidores y volver a guardar; 3) Enviar un formulario largo con campos opcionales/ocultos. Si uno de los pasos inconsistente tiendas, es max_input_vars un buen candidato. Solo cuando los tres escenarios funcionan de forma fiable, mis personalizaciones se consideran resistentes, incluso con crecimiento.
Brevemente resumido
El escenario max_input_vars actúa como un portero para todos los campos entrantes y a menudo decide si WordPress guarda limpiamente o se traga secretamente los datos. Con 3000 como límite inferior y 5000-10000 para configuraciones ricas en datos (fuente [1], [4]), creo el margen de maniobra necesario y elimino patrones de error desconcertantes. Verifico cada paso con WordPress Site Health y phpinfo() para reconocer claramente los valores maestros, las cachés y los módulos de seguridad. Sólo cuando los límites del proveedor, los archivos locales y las instancias activas de PHP coincidan, los ajustes funcionarán de forma fiable. Prestar atención a esta cadena evita tiempos de inactividad, reduce los costes de soporte y mantiene el Actuación del sitio es constantemente alto.


