今天在处理用户 excel
导入时,遇到个小问题
需求是这样的:用户导入
excel
后,用 PHPExcel 读取导入数据,渲染一个表单,用户通过查看表单,确认导入的数据完整性,最后在确认入库。
但由于用户 excel
导入的数据比较多,表单渲染后有超过 6000
个 input
, 并且提交时(POST
)是直接采用的表单提交,导致后台只能读取前面一小部分数据。
跟踪
1.查看表单提交请求完整性
通过跟踪提交时的 http
请求,发现所有数据都正常提交。
2.查看请求数据是否超过 php
或 nginx
限制
通过查看 Request Headers
下的 Content-Length
发现只有仅为 218558 B
也就是 20KB
左右。这肯定没达到限定值。
3.直接通过 file_get_contents('php://input')
获取原始请求数据
由于直接用 $_POST
获取的数据只有一少部分,故直接用 php://input
获取原始输入数据,打印出来时发现这种发送获取的数据是完整的。
4.通过函数 parse_str
解析原始请求参数
当我把原始输入数据用 parse_str
解析时
...
$origin = file_get_contents('php://input');
parse_str($origin, $result);
var_dump($result);
我得到了一个错误
Warning: parse_str(): Input variables exceeded 1000. To increase the limit change max_input_vars in php.ini
到这里,我应该明白问题出在哪里了。
5.修改 php.ini
中 max_input_var
数量
# 默认的 php.ini 配置
# How many GET/POST/COOKIE input variables may be accepted
# max_input_vars = 10000
默认的配置只允许请求(GET/POST/COOKIE
)的最大 input
数为 1000
个。
适当的修改了 php.ini
中 max_input_var
的值后,问题解决。
当然,最后是通过
ajax
提交json
格式数据解决的,毕竟修改php.ini
的配置还是不太理想!
结束
由于没有留意到 php
还有这个限制,导致在这儿翻车了,特别感谢 @freyo 的指点。你是我们的大神
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。