PHP的max_input_vars

我得到一个max_input_vars错误消息。

我知道有一个php.ini设置可以改变这个从版本5.3.9开始,但是,我正在运行版本5.1.6。

当我查看我的5.1.6服务器的configuration信息时,显示max_input_vars值为1000。

我的问题是:即使我正在运行5.1.6,我从phpinfo()看到这个设置,但它不在php.ini文件中。 这是否意味着这个版本的PHP中的值是硬编码的,不能改变?

你可以将它添加到php.ini,它应该工作 – 只需在PHP 5.3.6上进行testing。

PHP网上参考:

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

请注意,你不能用函数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 

刚刚尝试5.3.3的修复,没有任何改变。 谷歌search我发现这个网页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

我testing了它(在/ etc / php5 / apache2和/ etc / php5 / cli中添加了php.ini的设置,并成功重启了Apache),但在phpinfo中仍然没有使用max_input_varsvariables。

有几个站点指出PHP 5.3.9是第一个PHP版本,所以这个更改将会在第一个PHP版本中出现,所以我的错误首先是没有RTM,尽pipe我有兴趣看到有人报告它在5.3.3以上的版本中工作但是低于5.3.9。

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

这个指令的使用减轻了使用散列冲突的拒绝服务攻击的可能性。 如果有更多的inputvariables超出了这个指令的指定范围,就会发出一个E_WARNING,并且进一步的inputvariables被从请求中截断。

我可以build议不要扩展默认值1000,并通过序列化请求或按块发送请求来扩展应用程序function。 否则,您可以将其扩展到所需的configuration。

这肯定需要在php.ini中设置

是的,将其添加到php.ini,重新启动Apache,它应该工作。

如果你想用ini_set("max_input_vars",100)你可以随时testing它ini_set("max_input_vars",100)