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之前不存在...
drew010

2
许多参数的默认值都是硬编码的,但是您仍然可以分配一个新值。php.ini中未明确设置某些内容这一事实并不意味着您无法使用php.ini对其进行更改。
octern 2012年

您收到哪个错误消息?请添加到您的问题。
hakre 2012年


从升级5.1.6 -> 5.3.3,然后降级回5.1.6。扔给我,因为该选项在5.1.6 php.ini文件中不存在。我加了线,增加了数字,然后我的错误/问题消失了。
2014年

Answers:


48

您可以将其添加到php.ini,它应该可以工作-刚刚在PHP 5.3.6上进行了测试。


谢谢,这是值得知道的,尽管我使用的是5.3.3,但并不高兴。
沃尼

谢谢你那明显的指点,认真的-我一直在寻找这个设置一个小时....直到我看到这个,把它添加为虚拟!
jamesTheProgrammer 2012年

1
@Vaughany请注意,如果您位于bitnami堆栈上,则必须重新启动php-fpm才能使用它。只需重新启动apache就无济于事,甚至在/opt/bitnami/php/etc/php.ini更改后甚至根本不需要
什里尼克

101

在PHP网络上的参考:

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

请注意,您不能在运行时使用function设置此指令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上是可以的。
Alain Tiemblo 2013年

1
如果您有权访问php.ini,则指令语法为max_input_vars = 3000(+等号)。
Parapluie

@ shorif2000我在IIS,使用winuser.ini的PHP 7中使用.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补丁程序则需要更改)Debian下的Apache会这样做。

该网站说明:

因此,如果要将这个数字从默认数字1000增加到3000,则必须在php.ini中输入以下几行:

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

我对其进行了测试(在/ etc / php5 / apache2和/ etc / php5 / cli中都将设置添加到php.ini中,并成功重新启动了Apache),但是phpinfo中仍然没有max_input_vars变量。

一些站点将PHP 5.3.9称为将进行此更改的第一个PHP版本,因此我最初的错是RTM不合适,尽管我很感兴趣看到人们报告说它在5.3.3之上的版本中工作但低于5.3.9。


9

您需要取消注释php.ini文件中的max_input_vars值并增加它(exp。2000),也不要忘记重新启动服务器,这将有99,99%的帮助。


这在Ubuntu 12.04上对我不起作用。将其设置为3000并使用sudo service apache2 restart。我需要重启Ubuntu吗?
motorbaby

@motorbaby,如果您在php.ini中注释了此值,那么您将只有注释和重新启动服务。不需要重新启动操作系统,但是可以重新启动操作系统,但是我认为这没有任何意义。如果没有,请使用@ lubosdz解决方案。如果两者都无济于事,请检查是否在正确的位置进行了更改,例如,以某种方式拥有多个php.ini文件。您也可以尝试仅使用“ sudo服务apache2重装”来重装配置
Oleg Sapishchuk

线路在那里。我删除;并将其值更改为3000。问题可能出在浏览器的缓存中。关闭PHPMyAdmin并在新选项卡中打开,现在可以使用。谢谢!
motorbaby

6

现在是2018年,当我必须发送超出的请求时,我就陷入了这个问题max_input_vars。我想出了一个解决方案,像我这样的新手忘了在更改max_input_vars参数后重新启动php fpm服务。因为我只尝试重新启动apache2服务,而不是php fpm

  1. 取消注释代码/etc/php/7.0/fpm/php.ini并根据需要设置编号
    max_input_vars = 4000
  2. 重新启动php fpm服务,因为我使用的是php7。因此,
    sudo service php7.0-fpm restart

希望它可以帮助
测试上Debian Stretchphp7.0


我浪费了整整一天的时间,试图弄清楚如何确保应用更改并阅读了很多解决方案。他们都提到对php.ini进行更改后,应重新启动apache,这没有什么不同。按照此解决方案中所述重新启动php7.2-fpm解决了该问题!
nightrain

3

使用此指令可减轻使用哈希冲突的拒绝服务攻击的可能性。如果输入变量多于此伪指令指定的数目,则发出E_WARNING,并从请求中截断更多输入变量。

我建议不要扩展默认值1000,并通过序列化请求或按块发送请求来扩展应用程序功能。否则,您可以将此扩展到所需的配置。

它绝对需要在php.ini中设置


3

请注意,您必须将其放在Centos7中的“ .user.ini”文件中,而不是以前在Centos6中工作的“ php.ini”文件中。您可以将“ .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添加菜单项时遇到了同样的问题。我在Ubuntu 18.04,PHP 7.0上使用Wordpress 4.9.9。我只是取消注释以下行,并将其增加到1500 in/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。要增加限制,请在php.ini中更改max_input_vars。

这个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(默认值)上截断,并在.htaccess上声明“ php_value max_input_vars 6000”,引发错误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

我们可以通过ini_set函数设置此变量。为什么这个答案得票?php.net/manual/en/info.configuration.php
艾哈迈德(Ahmad)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.