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表單提交的資料遺失怎麼辦的詳細內容。更多資訊請關注PHP中文網其他相關文章!