php数据丢失的解决办法:首先查看表单提交请求完整性;然后查看请求数据是否超过php或nginx限制;接着直接通过“file_get_contents('php://input')”获取原始请求数据;最后修改max_input_var数量。
PHP 表单提交的数据丢失问题
今天在处理用户 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 还有这个限制,导致在这儿翻车了
更多相关知识,请访问PHP中文网!
Atas ialah kandungan terperinci php表单提交的数据丢失怎么办. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!