问题描述

今早业务系统中的带宽工具,出现因 Form 表单中传递的数据项过多,而后端 PHP 出现缺失部分参数值的问题。

问题原因

php.ini中有一配置项max_input_vars,默认值为1000。

表示接受多少输入的变量(限制分别应用于$_GET$_POST$_COOKIE超全局变量) 指令的使用减轻了以哈希碰撞来进行拒绝服务攻击的可能性。如有超过指令指定数量的输入变量,将会导致E_WARNING的产生,更多的输入变量将会从请求中截断。

英文解释如下:

How many GET/POST/COOKIE input variables may be accepted

因此,改变该值可以解决问题。但却可能引发如文档中所描述的不安全、加载速度过慢等问题。我们或许可以采用别的方式获取输入数据,比如php://input获取json字符串并解码的方式,或者将值用逗号拼接的方式等等。

参考资料