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中文網!
以上就是php表單提交的資料丟失怎麼辦的詳細內容,更多請關注TW511.COM其它相關文章!