php數(shù)據(jù)丟失的解決辦法:首先查看表單提交請求完整性;然后查看請求數(shù)據(jù)是否超過php或nginx限制;接著直接通過“file_get_contents('php://input')”獲取原始請求數(shù)據(jù);最后修改max_input_var數(shù)量。
改則網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)公司!從網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、成都響應(yīng)式網(wǎng)站建設(shè)等網(wǎng)站項目制作,到程序開發(fā),運營維護(hù)。創(chuàng)新互聯(lián)公司于2013年成立到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運維經(jīng)驗,來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)公司。
PHP 表單提交的數(shù)據(jù)丟失問題
今天在處理用戶 excel 導(dǎo)入時,遇到個小問題
需求是這樣的:用戶導(dǎo)入 excel 后,用 PHPExcel 讀取導(dǎo)入數(shù)據(jù),渲染一個表單,用戶通過查看表單,確認(rèn)導(dǎo)入的數(shù)據(jù)完整性,最后在確認(rèn)入庫。
但由于用戶 excel 導(dǎo)入的數(shù)據(jù)比較多,表單渲染后有超過 6000 個 input, 并且提交時(POST)是直接采用的表單提交,導(dǎo)致后臺只能讀取前面一小部分?jǐn)?shù)據(jù)。
跟蹤
1.查看表單提交請求完整性
通過跟蹤提交時的 http 請求,發(fā)現(xiàn)所有數(shù)據(jù)都正常提交。
2.查看請求數(shù)據(jù)是否超過 php 或 nginx 限制
通過查看 Request Headers 下的 Content-Length 發(fā)現(xiàn)只有僅為 218558 B 也就是 20KB 左右。這肯定沒達(dá)到限定值。
3.直接通過 file_get_contents('php://input') 獲取原始請求數(shù)據(jù)
由于直接用 $_POST 獲取的數(shù)據(jù)只有一少部分,故直接用 php://input 獲取原始輸入數(shù)據(jù),打印出來時發(fā)現(xiàn)這種發(fā)送獲取的數(shù)據(jù)是完整的。
4.通過函數(shù) parse_str 解析原始請求參數(shù)
當(dāng)我把原始輸入數(shù)據(jù)用 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
到這里,我應(yīng)該明白問題出在哪里了。
5.修改 php.ini 中 max_input_var 數(shù)量
# 默認(rèn)的 php.ini 配置 # How many GET/POST/COOKIE input variables may be accepted # max_input_vars = 10000
默認(rèn)的配置只允許請求(GET/POST/COOKIE)的 input 數(shù)為 1000 個。
適當(dāng)?shù)男薷牧?php.ini 中 max_input_var 的值后,問題解決。
當(dāng)然,最后是通過 ajax 提交 json 格式數(shù)據(jù)解決的,畢竟修改 php.ini 的配置還是不太理想!
結(jié)束
由于沒有留意到 php 還有這個限制,導(dǎo)致在這兒翻車了
更多相關(guān)知識,請訪問PHP中文網(wǎng)!
新聞標(biāo)題:php表單提交的數(shù)據(jù)丟失怎么辦
分享地址:http://weahome.cn/article/chosjh.html