今天在處理用戶 excel
導入時,遇到個小問題php
需求是這樣的:用戶導入
excel
後,用 PHPExcel 讀取導入數據,渲染一個表單,用戶經過查看錶單,確認導入的數據完整性,最後在確認入庫。nginx
但因爲用戶 excel
導入的數據比較多,表單渲染後有超過 6000
個 input
, 而且提交時(POST
)是直接採用的表單提交,致使後臺只能讀取前面一小部分數據。git
1.查看錶單提交請求完整性github
經過跟蹤提交時的 http
請求,發現全部數據都正常提交。ajax
2.查看請求數據是否超過 php
或 nginx
限制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.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 的指點。你是咱們的大神