PHP max_input_vars

85

Estou recebendo uma max_input_varsmensagem de erro.

Eu entendo que há uma php.iniconfiguração que pode mudar isso a partir da versão 5.3.9, no entanto, estou executando a versão 5.1.6.

Quando vejo as informações de configuração do meu servidor 5.1.6, mostra que o max_input_varsvalor é 1000.

Minha pergunta é: Embora eu esteja executando o 5.1.6, vejo essa configuração, phpinfo()mas ela não está no php.iniarquivo. Isso significa que o valor está codificado nesta versão do PHP e não pode ser alterado?

user39653
fonte
2
Não vejo nenhuma referência a max_input_varsno código-fonte do PHP 5.1.6, então não tenho certeza de como você está vendo isso na saída de phpinfo (). Pelo que eu sei, ele não existia antes de 5.3.9 ...
drew010
2
Muitos parâmetros têm padrões que são codificados permanentemente, mas você ainda pode atribuir um novo valor. O fato de que algo não está explicitamente definido no php.ini não significa que você não pode usar o php.ini para alterá-lo.
outubro de
Qual mensagem de erro você recebe? Por favor, adicione à sua pergunta.
hakre
Encontrei este erro depois de atualizar de 5.1.6 -> 5.3.3e depois de voltar para 5.1.6. Me jogou porque essa opção não existe no 5.1.6 php.iniarquivo. Eu adicionei a linha, aumentei o número e meu erro / problema foi embora.
JoshP

Respostas:

48

Você pode adicioná-lo ao php.ini e deve funcionar - apenas testei no PHP 5.3.6.

Narf
fonte
Obrigado, vale a pena saber, embora eu esteja no 5.3.3 e sem alegria.
Vaughany
obrigado por aquele indicador óbvio, sério - Eu estava procurando por esta configuração por uma hora ... até que eu vi isso, adicione-o manequim!
JamesTheProgrammer
1
@Vaughany Observe que se você estiver na pilha bitnami, terá que reiniciar o php-fpm caso o esteja usando. Simplesmente reiniciar o apache não vai ajudar e pode nem mesmo ser necessário depois de fazer uma alteração em /opt/bitnami/php/etc/php.ini
Shrenik
101

Referência em PHP net:

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

Observe, você não pode definir esta diretiva em tempo de execução com função ini_set(name, newValue), por exemplo

ini_set('max_input_vars', 3000);

Isso não vai funcionar.

Conforme explicado na documentação, esta diretiva só pode ser definida por escopo de diretório, o que significa via arquivo .htaccess, httpd.conf ou .user.ini (desde o PHP 5.3).

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

Adicionar a diretiva em php.ini ou colocar as seguintes linhas em .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
fonte
3
Ou colocar todas as 3 diretivas suhosin no php.ini está ok.
Alain Tiemblo
1
Se você tiver acesso ao php.ini, a sintaxe da diretiva é max_input_vars = 3000(+ sinal de igual).
Parapluie
@ Shortif2000 Tive problema semelhante no IIS, PHP 7 c / wincache, usando o arquivo .user.ini. O primeiro problema foi o cache. Mudei as linhas em ordem aleatória, em .user.ini até que finalmente funcionou. Segundo problema, alterar 1000 para 2000 não teve efeito, mas quando movi toda a linha para uma linha diferente, funcionou.
Ryan Briscall
20

Acabei de tentar essa correção com 5.3.3 e não há nenhuma mudança. Procurando no Google encontrei esta página da web http://anothersysadmin.wordpress.com/2012/02/16/php-5-3-max_input_vars-and-big-forms/ detalhando outras configurações que precisam ser alteradas se o seu servidor usar o patch Suhosin que o Apache no Debian faz.

O site explica:

Então, se você quiser aumentar este número para, digamos, 3000 a partir do número padrão que é 1000, você deve colocar em seu php.ini estas linhas:

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

Eu testei (adicionei configurações ao php.ini em / etc / php5 / apache2 e / etc / php5 / cli, e reiniciei o Apache com sucesso), mas ainda nenhuma variável max_input_vars no phpinfo.

Alguns sites apontam para o PHP 5.3.9 como a primeira versão do PHP na qual essa mudança ocorrerá, então minha culpa por não ter RTM corretamente em primeiro lugar, embora eu esteja interessado em ver pessoas relatando que ele está funcionando na versão acima de 5.3.3 mas abaixo de 5.3.9.

Vaughany
fonte
9

Você precisa descomentar o valor max_input_vars no arquivo php.ini e aumentá-lo (exp. 2000), também não se esqueça de reiniciar o servidor, isso ajudará em 99,99%.

Oleg Sapishchuk
fonte
Isso não funcionou para mim no Ubuntu 12.04. Defina-o para 3000 e usado sudo service apache2 restart. Eu preciso reiniciar o Ubuntu?
motorbaby
@motorbaby, se você tiver esse valor comentado no php.ini, então você só precisa descomentar e reiniciar os serviços. Reiniciar o sistema operacional não é necessário, mas poderia ser feito, mas não vejo nenhum sentido nisso. Se você não tem, use a solução @lubosdz. Se ambos não ajudarem, verifique se você está fazendo alterações no lugar certo, por exemplo, de alguma forma, você tem vários arquivos php.ini. Além disso, você pode tentar usar apenas "sudo service apache2 reload" para recarregar as configurações
Oleg Sapishchuk
A linha estava lá. Removi ;e alterei o valor para 3000. O problema provavelmente era o cache do navegador. Fechou o PHPMyAdmin e abriu em uma nova guia e agora funciona. Obrigado!
motorbaby
7

É 2018 agora. E fiquei preso neste problema quando devo enviar uma solicitação que excede o max_input_vars. E eu vim com uma solução que newie como eu esqueceu de reiniciar o serviço php fpm depois de alterar o max_input_varsparâmetro. porque eu só tentei reiniciar o apache2serviço, mas não php fpm

  1. descomente o código em /etc/php/7.0/fpm/php.inie defina o número como desejar
    max_input_vars = 4000
  2. reinicie o serviço php fpm, pois eu uso o php 7. Portanto,
    sudo service php7.0-fpm restart

Espero que ajude
Testado em Debian Stretch,php7.0

nokieng
fonte
Perdi um dia inteiro tentando descobrir como garantir que as mudanças sejam aplicadas e li tantas soluções. Todos eles mencionaram que depois de fazer alterações no php.ini você deveria reiniciar o apache, o que não fez diferença. Reiniciar o php7.2-fpm conforme observado nesta solução resolveu o problema!
trem noturno de
3

O uso desta diretiva reduz a possibilidade de ataques de negação de serviço que usam colisões de hash. Se houver mais variáveis ​​de entrada do que as especificadas por esta diretiva, um E_WARNING é emitido e outras variáveis ​​de entrada são truncadas da solicitação.

Posso sugerir não estender o valor padrão que é 1000 e estender a funcionalidade do aplicativo serializando a solicitação ou enviando a solicitação por blocos. Caso contrário, você pode estender isso para a configuração necessária.

Ele definitivamente precisa ser configurado no php.ini

Luis farfan
fonte
3

Observe que você deve colocar isso no arquivo ".user.ini" no Centos7 ao invés de "php.ini" que costumava funcionar no Centos6. Você pode colocar ".user.ini" em qualquer subdiretório para afetar apenas esse diretório.

.user.ini:

max_input_vars = 3000

Testado em Centos7 e PHP 5.6.33.

Gary Samad
fonte
2

php_value max_input_vars 6000

"Coloque esta linha no arquivo .htaccess do seu site."

Rahul KA
fonte
0

Novo bloco Cpanels para ver o arquivo .htaccess ou se você adicionar um .user.ini você não será capaz de vê-lo. mas com um pequeno hack você pode fazer funcionar. Edite por exemplo wp-config.php e na barra de URL substitua wp-config.php por .htaccess agora você pode colar os valores e salvá-los. insira a descrição da imagem aqui

Sebastian Heye
fonte
0

Apenas tive o mesmo problema ao adicionar itens de menu ao Wordpress. Estou usando o Wordpress 4.9.9 no Ubuntu 18.04, PHP 7.0. Eu simplesmente descomentei a seguinte linha e a aumentei para 1.500 em/etc/php/7.0/apache2/php.ini

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

Em seguida, usei o seguinte para efetuar a mudança:

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

Espero que ajude.

MagicMartinian
fonte
0

"Mensagem do PHP: PHP Warning: Unknown: Input variables ultrapassou 1000. Para aumentar o limite, mude max_input_vars em php.ini.

Este parâmetro de configuração php max_input_vars afetará não apenas seus parâmetros GET / POST / COOKIES, mas também controla qualquer entrada de formulário.

Para definir ou alterar seu valor, siga as etapas abaixo.

1) verifique a configuração / valor existente visualizando-o em seu arquivo php.ini. Localize o arquivo php.ini usando

<?php echo getinfo(); ?>

encontre a chave abaixo: Arquivo de configuração carregado: /etc/php/5.6/fpm/php.ini

2) Abra o arquivo php.ini em modo editável e pesquise max_input_vars. Esta linha pode ser comentada em sua configuração padrão existente com o valor padrão de 1000, então remova; para descomentar e editá-lo com seu valor adequado, por exemplo, 2500.

3) Salve o arquivo e reinicie os serviços de PHP usando abaixo sudo service php5.6-fpm restart

Da mesma forma, você pode atualizar qualquer outra configuração PHP semelhante para sua facilidade.

Patel Nikhil
fonte
0

Só para complementar. Em um servidor compartilhado usando mod_suphp, eu estava tendo o mesmo problema.

Declarar 4 max_input_vars (suhosin incluído), não resolveu, apenas continuou truncando em 1000 vars (padrão), e declarando "php_value max_input_vars 6000" em .htaccess gerou erro 500.

O que resolveu foi adicionar o seguinte em .htaccess, que aplica o arquivo php.ini recursivamente a esse caminho

suPHP_ConfigPath /home/myuser/public_html
Daniel
fonte
-6

Sim, adicione-o ao php.ini, reinicie o apache e deve funcionar.

Você pode testá-lo na hora se quiser com ini_set("max_input_vars",100)

Quaid
fonte
8
Isso não funcionará, consulte php.net/manual/en/info.configuration.php . Deve ser definido por host virtual de diretório ou htaccess, não ini_set.
lubosdz
Podemos definir essa variável por meio da função ini_set. Por que essa resposta teve votos negativos? php.net/manual/en/info.configuration.php
Ahmad