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中文網!
3dmax網格怎么去掉 3dmax網格使用教程新手想要域名該如何申請?有什么申請方法?騰訊云服務器怎么還原硬盤怎樣的域名價值高?哪些域名被拍出天價?云服務器云主機有什么區別 哪些用戶適合使用云主機公司網站打不開云服務器怎么辦呢秒收錄并不難,建網站有手段買了一個ecs云服務器