视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
php表单提交的数据丢失怎么办
2020-11-02 18:45:59 责编:小采
文档


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中文网!

下载本文
显示全文
专题