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)