提交表单时遇到的小问题
今天公司的财务结算时出现了一个小小的bug。场景大概是这样的:一个表单中有上千个复选框,(先不用管为什么这里设计成有如此多的复选框),有一个js控制着这上千个复选框的同时选中。问题发生在提交表单时,到了控制器层,丢失了一部分参数。
首先想到的是不是传输数据有长度限制,因为记得get是存在长度限制的。检查了method,是post。所以应该不是这个问题。接着查问题,在网上看到出现这个问题的不少,也了解到,nginx服务器对于客户端传输的数据body长度也是有配置的,看了下nginx.conf里的client_max_body_size 为50m。这一千多个参数的大小肯定没有50m,所以应该也不是这个问题。
检查完nginx的配置后,再看下php.ini的配置。
其中有一个post_max_size,配置的值为8m,上千个参数的大小也比这个小。所以应该也不是这层限制。
还有一个配置项:max_input_vars,当时的值是1000,发现和留存下来的参数数量差不多。于是改了2000试了下,重启服务器后。果然,一千多个参数全部能接收到了。
不过可以变通一下,将要传输的大量数组元素进行一次json_encode后传输。这样数组就是一个字符串了,接收时候json_decode就可以了。