背景
用户提交的数据发现缺失了一部分。查询日志后发现是通过是在使用post请求时,PHP接收的数据少了,在使用content-type为application/x-www-form-urlencoded时会被截断数据。
修复方案
为保证用户能尽快使用,采用了application/json来应急。
疑问
在nginx日志中发现了数据是有提交的。但是PHP为什么没有接收到呢。
源头
在查询PHP文档后发现php.ini中有个配置叫:max_input_vars

影响了
_POST,$_COOKIE,没有影响php://input
实验
-
PHP环境:7.1.29

-
修改php.ini,将max_input_vars修改为5

-
测试post,直接返回接收到数据
var_dump($_POST);

6个参数返回了5个。
-
发现一个问题,PHP日志里面报错了(这个可以监控起来)

-
试试将max_input_vars设置为0

没有数据了😂,所以不能设置为0
- php://input会不会也有这样到限制呢?
- 修改post_max_size试试。
- 先来看未修改到效果
- 先生成一个10000个key到数据
$arr = []; for($index = 0; $index <= 10000; $index++) { $arr["key".$index] = $index; } echo json_encode($arr);
- 提交测试

- 记住数据大小:144kb
- 修改post_max_size为10kb(默认为50M)

- 再次提交数据
- 结果还是返回了。(是不能设置kb吗,那设置为1M试试)

- 再次提交试试(将数据复制10次)

- 结果OK。
- 说明对他没影响?
- 再试试upload_max_filesize

- emmmmm,还是成功了。

思考
- php://input 就没有大小限制了吗?