php post接收不到資料的解決方法:1、將php.ini裡max_input_vars改為5000;2、透過「$GLOBALS['HTTP_RAW_POST_DATA']」取得資料。
本文操作環境:windows7系統、PHP7.1版、DELL G3電腦
一:PHP 使用POST 取得不到部分數據問題
使用PHP開發的一個項目,在測試階段客戶反饋說數據沒有保存成功
而我之前測試是通過的,但按客戶的信息上卻重現了問題
問題是這樣的
客戶透過瀏覽器進行保存,但有些資料已經保存成功,但某些資料卻沒有保存成功
而我透過測試發現$_POST 某些資料竟然沒有,但有些是有的
而file_get_contents("php://input");這種方式也可以取得資料,但因為資料需要處理,加上程式碼需要做不少改動
所以考慮下來還是要解決$_POST的問題
#一開始我也是很納悶,之前遇到的都是$_POST全部無法取得的問題,但只能取得部分資訊還是頭一次遇到
既然$_POST是能提交資料的,那麼要不就是提交前部分資料沒有傳送到後台,要嘛就是後台沒有收到
而透過查看瀏覽器的請求並沒有發現有什麼問題,所有資料都是正常發送的
那麼就是後台沒有取得到了
在我一次測試中發現,我把提交的資料手動進行了刪除,然後再提交
後台$_POST就能獲取到全部的資料了,而後又在網上進行了搜索
才發現$_POST提交的資料有大小限制的
接著將php.ini裡max_input_vars 改為5000完美解決
#二:php中$_POST接收不到前端資料的解決方法
預設情況下前端請求類型為Content-Type:application/x- www-form-urlencoded,使用$_POST即可取到數據,
如果前端請求類型為Content-Type:application/json,僅使用$_POST無法取到資料。 (如vue.js的axios,預設方式為application/json)
此時可以透過$GLOBALS['HTTP_RAW_POST_DATA']取得,再使用json_decode轉為對象,範例如下
$mypost = $GLOBALS['HTTP_RAW_POST_DATA']$postdata = json_decode($mypost);$username = $postdata->username;
如果提示Undefined index: HTTP_RAW_POST_DATA,則將程式碼改為如下即可。
$mypost = isset($GLOBALS['HTTP_RAW_POST_DATA'])?$GLOBALS['HTTP_RAW_POST_DATA']:file_get_contents("php://input");$postdata = json_decode($mypost);$username = $postdata->username;
推薦學習:《PHP影片教學》
#以上是php post 接收不到資料怎麼辦的詳細內容。更多資訊請關注PHP中文網其他相關文章!