PHP 表單提交的數據丟失問題

今天在處理用戶 excel 導入時,遇到個小問題php

需求是這樣的:用戶導入 excel 後,用 PHPExcel 讀取導入數據,渲染一個表單,用戶經過查看錶單,確認導入的數據完整性,最後在確認入庫。nginx

圖片描述

但因爲用戶 excel 導入的數據比較多,表單渲染後有超過 6000input, 而且提交時(POST)是直接採用的表單提交,致使後臺只能讀取前面一小部分數據。git

跟蹤

1.查看錶單提交請求完整性github

經過跟蹤提交時的 http 請求,發現全部數據都正常提交。ajax

2.查看請求數據是否超過 phpnginx 限制shell

經過查看 Request Headers 下的 Content-Length 發現只有僅爲 218558 B 也就是 20KB 左右。這確定沒達到限定值。json

3.直接經過 file_get_contents('php://input') 獲取原始請求數據函數

因爲直接用 $_POST 獲取的數據只有一少部分,故直接用 php://input 獲取原始輸入數據,打印出來時發現這種發送獲取的數據是完整的。spa

4.經過函數 parse_str 解析原始請求參數excel

當我把原始輸入數據用 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.inimax_input_var 數量

# 默認的 php.ini 配置
# How many GET/POST/COOKIE input variables may be accepted
# max_input_vars = 10000

默認的配置只容許請求(GET/POST/COOKIE)的最大 input 數爲 1000 個。

適當的修改了 php.inimax_input_var 的值後,問題解決。

固然,最後是經過 ajax 提交 json 格式數據解決的,畢竟修改 php.ini 的配置仍是不太理想!

結束

因爲沒有留意到 php 還有這個限制,致使在這兒翻車了,特別感謝 @freyo 的指點。你是咱們的大神

相關文章
相關標籤/搜索