php表單提交的資料丟失怎麼辦

2020-07-16 10:06:19

php資料丟失的解決辦法:首先檢視表單提交請求完整性;然後檢視請求資料是否超過php或nginx限制;接著直接通過「file_get_contents('php://input')」獲取原始請求資料;最後修改max_input_var數量。

PHP 表單提交的資料丟失問題

今天在處理使用者 excel 匯入時,遇到個小問題

需求是這樣的:使用者匯入 excel 後,用 PHPExcel 讀取匯入資料,渲染一個表單,使用者通過檢視表單,確認匯入的資料完整性,最後在確認入庫。

企業微信截圖_1594435806701.png

但由於使用者 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其它相關文章!