首頁 >後端開發 >PHP問題 >php表單提交的資料遺失怎麼辦

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

藏色散人
藏色散人原創
2020-07-11 10:52:423238瀏覽

php資料遺失的解決方案:先查看表單提交請求完整性;然後查看請求資料是否超過php或nginx限制;接著直接透過「file_get_contents('php://input')」取得原始請求資料;最後修改max_input_var數量。

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

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

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

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

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

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

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn