从 PHP 5.3.9 起,php.ini 中增加了一个配置项 max_input_vars,默认值为1000。

手册中 max_input_vars 释义如下:

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

 

平时的开发中只是做一些小应用,数据量太小,几乎不会关心这个配置项。处理一些数据量较大的表单时,就很可能会碰到了。

例如,表单中某字段用了多选框,选项超过1000个,提交的时候,就会造成后面的字段被自动截断,致使程序没有正常接收提交的全部数据。今天上午,我在公司就遇到了这个问题!

增大 php.ini 中的 max_input_vars  默认值,可以解决问题。但服务器较多,都修改也麻烦。还有就是,修改 php.ini 降低了程序代码的通用性。

变通的解决办法:继续用多选框,但表单改用 ajax 处理提交,在提交前将多选框选中的值拼接成一个字符串,放入一个新字段提交,后端接收字符串值再拆解成数组处理。