php 表单post提交大量数据发生数据丢失或减少的解决方法

最近在项目中,出现一个奇怪的现象,有一个大form里面有上千个input,提交的时候,老是发现post过来的数据不完整,一开始还怀疑是html 表单名称有冲突,排除掉了。
然后,网上找了一堆,php.ini 的post_max_size和upload_max_filesize都设置了很大的值,没用,nginx的client_max_body_size 500m;加到了那么大的值,也没用。
最后终于google到办法:原来PHP从5.3.9开始增加一个变量 max_input_vars 用来限制提交的表单数量

 

 该值默认情况下是1000 , 不能满足有1000个以上输入项的需求,所以得在php.ini 里面加上更大的值如:
max_input_vars = 5000,重启服务器。

 

如何避免这样的问题

  1. 自然是想办法增加 max_input_vars 的大小,但这样有个难以逃避的问题,就是前端传过来数据的个数你是没办法知道应该是多少的
  2. 减少 post 的字段,先 js json_encode 一下,再用一个大字段传过来
  3. 使用 post 的 body 将数据传过来;在 php 端使用 file_get_contents('php://input') 来获取之后在 json_decode;我觉得这中方法比较可取,因为 restful 设计里面就采用的这种方法。
posted @ 2021-01-13 17:12  一个人的孤独自白  阅读(132)  评论(0编辑  收藏  举报