昨天夜里生产环境出了个bug, 一个巨大无比的form ,包括三张图片, 几百个输入框, 近一千个checkbox,
在用post方法提交到后台的时候, 发现数据被拦腰截断。
一路打debug, 发现PHP 拿到 $_POST的时候,数据就不足。
一开始以为是php中的post_max_size, upload_max_size的问题, 但是设成100M也不管用
后来又以为是Apache 中的limitpostdate的问题,设大了之后也不管用。
后来在客户端装wireShark抓包, 发现tcp包中间出现 TCP WINDOWS FULL, 于是又以为是浏览器在TCP第二次握手的时候, 没有正确传输总package size。
又看到人说是CentOS中的Tcp package size的设置的问题。
直到最后, 在Apache的error.log中发现, 出了如下错误:
PHP Warning: Unknown: Input variables exceeded 1000
一查,原来PHP中默认post中的参数的个数是1000, 超过部分会被自动扔掉。操!!!!!!!!!!!!
对应方法很简单,
在PHP.ini中设置 max_input_vars
= 2000
以上,蒋彪@南京