Muitos erros no WordPress têm uma causa silenciosa: a definição php max input vars wordpress. Mostrar-lhe-ei como este valor limite corta as definições, guarda formulários incompletos e torna o desempenho mais lento - e como definir o valor corretamente.
Pontos centrais
Para começar, vou fazer um breve resumo dos aspectos mais importantes para que possa reconhecer rapidamente por onde deve começar.
- Valor limiteMax Input Vars define quantas variáveis o PHP aceita por pedido.
- SintomasOpções de tema em falta, formulários truncados, erros de plug-in.
- HospedagemOs valores principais e os módulos de segurança podem sobrepor-se às definições locais.
- Otimizaçãophp.ini, .htaccess ou .user.ini com cuidado.
- Valores standard3000 no mínimo, 5000-10000 para grandes instalações (fonte [1], [4]).
O que é o PHP Max Input Vars - e porque é que afecta o WordPress?
O parâmetro max_input_vars limita o número de variáveis POST e GET que o PHP processa em uma única solicitação e, portanto, serve como proteção contra formulários superdimensionados e inundações de configuração. Numa instalação típica do WordPress, as opções dos painéis de temas, personalizadores, widgets, menus, definições de plug-ins e campos de formulário somam rapidamente muitas centenas de entradas, o que leva a dados truncados se o limite for demasiado pequeno. Os construtores de páginas, os plug-ins de comércio eletrónico e os formulários multinível, em particular, aumentam o número, razão pela qual defino um valor inicial de 3000 e considero 5000 a 10000 para configurações extensas (fonte [1], [4]). Se também quiser utilizar outros Limites do PHP demasiado rigoroso agrava a situação, porque vários parafusos de ajuste funcionam como travões ao mesmo tempo. É importante uma abordagem consciente: um valor demasiado baixo resulta numa perda silenciosa de dados, ao passo que um valor sensatamente aumentado cria Estabilidade.
Padrões de erro típicos no WordPress quando o limite é demasiado baixo
Um primeiro sinal de alerta é o armazenamento incompleto de Opções do temaClico em Guardar, mas apenas algumas das definições são mantidas, enquanto outras parecem “saltar para trás”. Igualmente críticos são os formulários de grandes dimensões em que os campos individuais desaparecem sem deixar rasto, porque o PHP elimina as variáveis em excesso, pelo que as encomendas, os registos ou os pedidos de assistência chegam incompletos. Em menus com muitas entradas, as alterações ou a ordenação desaparecem, o que os operadores muitas vezes atribuem erradamente aos plugins. Os construtores de páginas perdem definições de módulos ou widgets, mesmo que o editor esteja a funcionar corretamente, o que torna difícil analisar a causa. Quando vejo estes sintomas agrupados, verifico imediatamente o valor de max_input_vars, antes de continuar a ajustar os plug-ins ou os temas.
Limites de alojamento, valores mestre e módulos de segurança
Mesmo que eu aumente os valores localmente, uma Valor principal do fornecedor pode anular todas as alterações, o que é particularmente comum em alojamento partilhado. Cenário típico: defino 5000 no meu php.ini, mas o servidor só aceita 1000 porque se aplica um limite global e ignora os ajustes locais. Módulos de segurança adicionais, como o Suhosin, introduzem os seus próprios limites de entrada, que depois tenho de aumentar separadamente, caso contrário continuam a bloquear campos em excesso, apesar das max_input_vars corretas. Por isso, em casos teimosos, começo com um pedido de informação ao hoster para confirmar o valor mestre efetivo e nomear possíveis módulos. Só quando esta cadeia está corretamente configurada é que as alterações locais têm realmente efeito contínuo.
Diagnóstico: Como encontrar rapidamente o ponto de estrangulamento
Em caso de suspeita, abro primeiro o Estado do sítio Web-no administrador do WordPress e verificar o valor ativo real de max_input_vars, idealmente complementado por phpinfo() num ficheiro de teste. Se as minhas alterações diferirem do valor apresentado, ou está a ser bloqueado um valor principal ou alterei a instância errada (por exemplo, um manipulador de PHP errado ou um diretório errado). Como teste, guardo um menu com muitas entradas ou um formulário longo e observo se faltam entradas, o que confirma o estrangulamento. Ao mesmo tempo, certifico-me de limpar a cache de objectos ou de páginas e a OPCache, caso contrário as configurações antigas permanecerão visíveis. Também faz sentido dar uma olhadela no Limite de memória PHP, uma vez que os formulários de grandes dimensões e as interfaces dos construtores consomem muita memória e constituem um limite apertado para a interação de outros Efeitos pode desencadear.
Configuração na prática: quatro formas fiáveis
Adopto uma abordagem pragmática à personalização: Primeiro, peço ao hoster para ativar o aumento do lado do servidor, porque é a forma menos propensa a erros e tem diretamente em conta os valores principais. Com acesso root ou gerido, edito o php.ini, defino um valor claro (cerca de 5000) e reinicio o serviço PHP para que a alteração se torne ativa. Em sistemas Apache, posso trabalhar no .htaccess, desde que o mod_php esteja a funcionar, e se o Suhosin estiver ativo, posso aumentar os seus limites. Sem acesso ao php.ini central, utilizo um .user.ini no webroot, que funciona de forma fiável em muitos ambientes geridos. Depois, verifico a alteração no WordPress e com o phpinfo(); só quando ambos estão corretos é que testo a gravação de menus, formulários e Opções.
; php.ini
max_input_vars = 5000
# .htaccess (apenas com 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
Selecionar valores: Quão elevado é o valor sensato?
Raramente começo com 3000, porque as interfaces de administração modernas enviam muitas variáveis, mesmo em funcionamento básico (fonte [1]). Para sítios com construtores de páginas, muitos widgets, menus específicos de línguas ou extensos painéis de plugins, defino 5000 como orientação para a utilização quotidiana (fonte [4]). Para grandes lojas WooCommerce com produtos variáveis, filtros e formulários de checkout complexos, planeio 7.000 a 10.000 para deixar espaço para o crescimento. É importante testar passo a passo: após cada aumento, verifico as áreas problemáticas para não chegar a um valor demasiado alto, mas os erros desaparecem em segurança. O objetivo é um valor que seja sustentável hoje e que deixe reservas para amanhã, sem aumentar desnecessariamente outros limites. estirpe.
Interações com plugins e temas
Noto que os plug-ins de cache ou de desempenho têm os seus próprios .htaccess-e, assim, substituem os valores previamente definidos, razão pela qual verifico novamente as diretivas activas depois de fazer alterações a essas ferramentas. Os construtores de páginas com módulos aninhados aumentam muito a variação, especialmente quando as opções globais e relacionadas com a página se juntam. Os geradores de menus ou as ferramentas de importação enviam muitos campos de uma só vez, o que leva imediatamente a dados truncados se os limites forem apertados. Especialmente após actualizações de plugins, verifico brevemente os efeitos porque as novas funções podem trazer consigo definições adicionais. Quem se queixar de grandes estruturas de navegação pode encontrar mais informações sobre este assunto em Desempenho do menu, porque os menus são reais Condutor variável.
Desempenho e segurança: o equilíbrio certo
Um limite mais elevado significa que o PHP tem mais Variáveis o que pode significar mais dados por pedido, mas não conduz automaticamente a picos de carga. Só se torna crítico quando formulários com milhares de campos são processados regularmente e, portanto, exigem mais da memória e da CPU. Por conseguinte, combino o aumento de max_input_vars com uma análise do tempo de execução, do tamanho dos dados introduzidos e do limite de memória, para que o sistema global se mantenha coerente. Do lado da segurança, o valor limite faz sentido porque pode limitar pedidos erróneos ou intencionalmente sobrecarregados; um nível seguro pode ser mantido aqui com a proteção do fornecedor, WAF e limites de taxa. Por conseguinte, escolho um valor que cubra os requisitos reais sem maximizar cegamente todos os limites. largo.
| Cenário | Variáveis típicas | max_input_vars | Nota |
|---|---|---|---|
| Pequeno sítio (blogue, portefólio) | 200-800 | 3000 | Reserva suficiente para actualizações temáticas (fonte [1]) |
| Site multilingue com o Builder | 800-2500 | 5000 | Muitos painéis e menus (fonte [4]) |
| WooCommerce com variantes | 2000-6000 | 7000-10000 | Âmbito de aplicação das opções de checkout e de produto (fonte [1], [4]) |
| Formulários empresariais/CRM | 5000+ | 10000+ | Coordenação estreita com o anfitrião, controlo utilizar |
Resolução de problemas: As alterações não funcionam - e agora?
Se, apesar do ajustamento, nada se alterar, verifico primeiro a Gestor de PHP (mod_php, FPM, CGI), porque o contexto errado torna os ficheiros locais ineficazes. Depois comparo o phpinfo() com o WordPress Site Health para excluir as caches e ver os valores efectivos. Se o valor se mantiver teimosamente baixo, há quase sempre um valor principal no fornecedor, que eu confirmei por escrito e levantei. Com as configurações do FPM, posso ter de configurar o pool correto ou recarregar o serviço, caso contrário, o valor antigo permanece ativo. Se o Suhosin continuar a bloquear, aumento o seu request.max_vars e post.max_vars até que o Número de formulários passa em segurança.
Exemplos práticos e diretrizes que funcionam
Para uma instalação de blogue com um tema padrão e alguns plug-ins, utilizo 3000, Testo os menus e as opções do tema e, normalmente, fico-me por aí. Começo um sítio Web de uma empresa com mega menus, conteúdos multilingues e um construtor de páginas diretamente com 5000, o que, na prática, traz uma tranquilidade notável. Um sistema de loja maior, com variantes e campos adicionais, começa com 7000 e aumenta para 10000, se necessário, para que as importações de produtos, as personalizações de checkout e os painéis de administração funcionem corretamente. O rácio entre os tamanhos reais dos formulários e os painéis é mais importante do que o valor absoluto, razão pela qual registo as alterações e monitorizo os picos de carga. Isto cria uma definição que é permanentemente Fiável funciona e permite um escalonamento posterior.
Como é que as variáveis PHP contam realmente - e porque é que os construtores atingem os seus limites tão rapidamente
Importante para a prática: Cada campo do formulário corresponde a pelo menos uma variável em $_POST ou $_GET. WordPress utiliza frequentemente para painéis complexos Sintaxe de matriz entre parênteses, por exemplo opção[grupo][subgrupo][campo]. PHP constrói matrizes aninhadas a partir dele - e cada folha nesta estrutura conta contra max_input_vars. Os campos repetitivos, as listas dinâmicas, os mega menus e as variantes de tradução aumentam o número de campos de forma particularmente rápida. A isto juntam-se Campos ocultos (por exemplo, nonces, IDs) e parâmetros sistémicos que os operadores facilmente ignoram. Isto explica porque é que um formulário com „apenas“ 300 entradas visíveis pode gerar internamente mais de 1000 variáveis.
São particularmente afectados:
- Editores de menus (cada item de menu tem vários campos e metadados)
- Construtor de páginas com widgets aninhados, opções globais e de página
- Painéis de opções de temas/plugins que transferem árvores de configuração completas
- Configurações multilingues, onde os campos são duplicados para cada língua
Importante: max_input_vars limita o número de variáveis - não o Tamanho total do inquérito. Os limites de tamanho são tamanho_máximo_do_post e tamanho_máximo_de_arquivo_para_upload responsável. Ambos devem corresponder ao incremento selecionado para que os pedidos não sejam cancelados noutro local.
Arquitecturas de servidor em resumo: Apache, NGINX, FPM, Container
Se e onde uma alteração tem efeito depende muito da arquitetura. Uma breve visão geral que encurta muitos processos de resolução de problemas:
- Apache com mod_php:
.htaccesspodephp_valuedefinido. Tem efeito imediato, mas apenas neste contexto. - Apache + PHP-FPM (proxy_fcgi):
.htaccessignoradophp_value. As alterações são efectuadas emphp.ini,.user.iniou no Piscina FPM. - NGINX + PHP-FPM: Nenhum
.htaccess-ficheiros. Configuração através dephp.ini,.user.iniou pool FPM; o próprio NGINX não sabe o valor. - Contentor/GeridoAlterações frequentes através da opção do painel, variável de ambiente ou montagem do ficheiro ini. Após actualizações/implantações, verificar se os valores persistem.
Em ambientes FPM, protejo-me introduzindo o valor diretamente no piscina e recarregar o serviço:
; /etc/php/8.2/fpm/pool.d/www.conf
php_admin_value[max_input_vars] = 7000
; Então: systemctl reload php8.2-fpm (ou recarregue o serviço apropriadamente)
Para .user.ini Aplica-se o seguinte: As alterações nem sempre são activadas imediatamente. Dependendo do user_ini.cache_ttl demora alguns minutos até que os novos valores sejam visíveis. Por isso, planeio um tempo de espera ou um recarregamento do FPM. Sinal de erro: o WordPress continua a reportar o valor antigo mesmo que o ficheiro esteja corretamente localizado - então o TTL da cache entra em vigor ou um valor principal é bloqueado.
Importante: Definir php_value apenas em .htaccess, quando mod_php está ativo. Nas configurações do FPM, isto normalmente dá origem a erros 500 porque o servidor Web não compreende a diretiva.
Medir em vez de adivinhar: Contagem de variáveis em direto e simulação de estrangulamentos
Antes de aumentar o valor „por suspeita“, meço a procura real. Um pequeno auxiliar de diagnóstico como código temporário num plug-in de utilização obrigatória ou functions.php escreve a contagem no registo:
<?php
// Aviso: Usar apenas temporariamente e remover depois.
add_action('admin_init', function () {
if (!empty($_POST)) {
// Contagem recursiva de todos os valores da folha
$count = 0;
$it = new RecursiveIteratorIterator(new RecursiveArrayIterator($_POST));
foreach ($it as $v) { $count++; }
error_log('Vars POST (recursivo): ' . $count);
error_log('max_input_vars (ini): ' . ini_get('max_input_vars'));
}
});
Isto permite-me ver imediatamente se um processo de armazenamento atingiu o seu limite. Também testo com um „formulário de stress“ (por exemplo, campos fictícios gerados) para verificar se não desaparecem mais campos após um aumento. Importante: Esvazie as caches para que o backend não continue a apresentar estados antigos.
Casos especiais: Multisite, API REST, Ajax e carregamentos
Em MultisiteAs definições de rede, as opções baseadas em funções e as entradas específicas do idioma são adicionadas muito rapidamente nas sub-redes. Planeio com valores mais elevados desde o início e verifico por sub-rede, porque os painéis podem diferir consideravelmente.
Nem todas as funções do WordPress são igualmente afectadas: API REST-enviam frequentemente JSON no corpo do pedido, que não é reconhecido como um $_POST é analisado; max_input_vars normalmente não se aplica neste caso. Em contrapartida, os admin-ajax.php-Os pedidos (formulários POST) estão claramente vinculados ao limite. Por isso, se utilizar construtores que guardam através de Ajax, continua a ter de estar atento ao limite.
Definido para carregamentos de ficheiros max_file_uploads o número máximo de ficheiros simultâneos, enquanto tamanho_máximo_de_arquivo_para_upload e tamanho_máximo_do_post definem os limites de tamanho. Se os carregamentos excederem estes valores, ocorrem erros, independentemente do max_input_vars. Em ambientes restritivos, os limites do servidor Web ou do WAF (por exemplo, limites do corpo do pedido) também podem intervir - uma razão típica para o cancelamento „súbito“ de pedidos, apesar dos valores PHP corretamente definidos.
Prevenção de erros a nível do código: quando o incremento por si só não é suficiente
Do ponto de vista de um programador, é muitas vezes sensato dividir grandes configurações em Subsecções ou para os guardar passo a passo. Os seguintes padrões reduzem o fluxo de variáveis:
- Paginação/etapasDivisão de formulários longos em etapas e gravação de cada etapa no lado do servidor.
- ChunkingDivida grandes conjuntos de opções em blocos e transfira-os um após o outro através de Ajax.
- Armazenamento diferencialEnviar apenas os campos alterados em vez de toda a árvore de opções.
- Armazenamento em sérieUtilizar uma opção estruturada com serialização em vez de muitos campos individuais (limita o número de variáveis aquando do envio).
Estes padrões minimizam as dependências de max_input_vars e tornar os processos administrativos mais robustos, especialmente em ambientes com limites rigorosos de fornecedores.
Melhores práticas e lista de controlo para operações em curso
- Medir antes de levantarRegistar o número de variáveis para acções críticas (guardar menu, guardar página do construtor).
- Aumento das etapasAumentar em passos sensatos (3000 → 5000 → 7000) e testar após cada passo.
- Verificar a arquiteturaVerificar o manipulador (mod_php/FPM/CGI) e utilizar o caminho adequado (php.ini, .user.ini, pool FPM).
- Confirmar o valor mestreO valor limite global deve ser solicitado ao prestador de serviços e documentado.
- Sincronizar os módulos de segurançaAumentar o Suhosin e os limites comparáveis em paralelo.
- Controlo de versão da configuraçãoIncluir ficheiros ini/pool nos processos de implementação para que as actualizações não reiniciem os valores.
- Caches vaziasInvalidar a cache de objectos, a cache de páginas e a OPCache após as alterações.
- Limites de tamanho num relance: tamanho_máximo_do_post, tamanho_máximo_de_arquivo_para_upload, max_file_uploads, tempo_de_execução_máx e memory_limit sintonizar corretamente.
- Estabelecer um controloVerifique os registos para detetar processos de gravação recorrentes „truncados“ e erros de administração.
Cenários de teste práticos que revelam rapidamente problemas ocultos
Nas auditorias, faço três pequenos testes: 1) Guardar um menu extenso com ordenação; 2) Duplicar uma página do construtor com muitos widgets/repetidores e guardar novamente; 3) Submeter um formulário longo com campos opcionais/ocultos. Se um dos passos incoerente lojas, é max_input_vars um bom candidato. Só quando os três cenários funcionam de forma fiável é que as minhas personalizações são consideradas resilientes - mesmo com o crescimento.
Brevemente resumido
A definição max_input_vars actua como um guardião para todos os campos de entrada e decide frequentemente se o WordPress guarda os dados de forma limpa ou se os engole secretamente. Com 3000 como limite inferior e 5000-10000 para configurações ricas em dados (fonte [1], [4]), crio a margem de manobra necessária e elimino padrões de erro intrigantes. Verifico cada passo com o WordPress Site Health e o phpinfo() para reconhecer claramente os valores principais, as caches e os módulos de segurança. Só quando os limites do fornecedor, os ficheiros locais e as instâncias activas do PHP coincidem é que os ajustes funcionam de forma fiável. Prestar atenção a esta cadeia evita tempos de inatividade, reduz os custos de suporte e mantém o Desempenho do sítio é constantemente elevado.


