解決$GLOBALS["HTTP_RAW_POST_DATA"]獲取不到資料的問題
$GLOBALS ["HTTP_RAW_POST_DATA"]跟$_POST,file_get_contents('php://input') 差不多,用$GLOBALS ["HTTP_RAW_POST_DATA"]或file_get_contents('php://input')的情況大多是為了獲取$_POST無法接收的資料型別(如XML資料)
在$GLOBALS ["HTTP_RAW_POST_DATA"]取不到值的情況下可以按以下方式排查:
1.用file_get_contents('php://input')獲取資料。如果獲取不到,則可能是資料傳輸錯誤,對請求進行捉包,分析資料。
2.如果file_get_contents('php://input')有資料。則檢視php.ini配置檔案。
找到如下,如果沒開啟則開啟
- always_populate_raw_post_data = On
注意:這種處理方式是在php版本較低的時候,在php-ini中才有的配置,當版本升級到7,或者更高的時候該機制就被廢棄掉了。
下邊歸納幾種php獲取post資料的方式:
RPC 規定接收取值方式 $GLOBALS['HTTP_RAW_POST_DATA'];
PHP預設識別的資料型別是application/x-www.form-urlencoded標準的資料型別。
1、$_POST['paramName']
只能接收Content-Type: application/x-www-form-urlencoded提交的資料,php會將http請求body相應資料會 填入到陣列$_POST,填入到$_POST陣列中的資料是進行urldecode()解析的結果。(其實,除了該Content-Type,還有 multipart/form-data表示資料是表單資料) 2、file_get_contents("php://input")
適用大多數型別的Content-type,php://input 允許讀取 POST 的原始資料。和 $HTTP_RAW_POST_DATA 比起來,它給記憶體帶來的壓力較小,並且不需要任何特殊的 php.ini 設定。php://input 不能用於 enctype="multipart/form-data"。
3、$GLOBALS['HTTP_RAW_POST_DATA'];
總是產生 $HTTP_RAW_POST_DATA 變數包含有原始的 POST 資料。此變數僅在碰到未識別 MIME 型別的資料時產生。$HTTP_RAW_POST_DATA 對於 enctype="multipart/form-data" 表單資料不可用。
如果post過來的資料不是PHP能夠識別的,你可以用 $GLOBALS['HTTP_RAW_POST_DATA']來接收,比如 text/xml 或者 soap 等等。需要設定php.ini中的always_populate_raw_post_data值為On,PHP才會總把POST資料填入變數$http_raw_post_data。
1,Coentent-Type僅在取值為application/x-www-data-urlencoded和multipart/form- data兩種情況下,PHP才會將http請求資料包中相應的資料填入全域性變數$_POST
2,PHP不能識別的Content-Type型別的時候,會將http請求包中相應的資料填入變數$HTTP_RAW_POST_DATA
3, 只有Coentent-Type不為multipart/form-data的時候,PHP不會將http請求資料包中的相應資料填入php: //input,否則其它情況都會。填入的長度,由Coentent-Length指定。
4,只有Content-Type為application/x-www-data-urlencoded時,php://input資料才 跟$_POST資料相一致。
5,php://input資料總是跟$HTTP_RAW_POST_DATA相同,但是php://input 比$HTTP_RAW_POST_DATA更湊效,且不需要特殊設定php.ini
6,PHP會將PATH欄位的query_path部分,填入全域性變數$_GET。通常情況下,GET方法提交的http請求,body為空。
總之:
1、如果是 application/x-www-form-urlencoded 和 multipart/form-data 格式 用 $_POST;
2、如果不能獲取的時候比如 text/xml、application/json、soap,使用 file_get_contents('php://input');
相關推薦
解決$GLOBALS["HTTP_RAW_POST_DATA"]獲取不到資料的問題
昨天在微信中公眾號開發中使用$GLOBALS["HTTP_RAW_POST_DATA"]來獲取微信公眾平臺推送過來的post資料,結果驚奇的發現微訊號總是提示“該微信公眾號暫時無法提供服務”,仔細去檢查程式碼,也沒錯,可就是無法提供服務。今天又檢查了一把,還是沒有語法錯誤,
微信介面$GLOBALS['HTTP_RAW_POST_DATA']接收不到值
$xml = $GLOBALS['HTTP_RAW_POST_DATA'];列印$xml出來,結果是null使用的是php7,原因是php7已移除這個全域性變數,改成$xml = file_get_contents("php://input");即可
微信公共平臺php語言開發時php用$GLOBALS["HTTP_RAW_POST_DATA"]收不到資訊
今天在用php語言開發微信公眾號後臺時,發現使用以下語句獲取粉絲髮來的資訊時 simplexml_load_string($GLOBALS['HTTP_RAW_POST_DATA'],'SimpleXMLElement',LIBXML_NOCDATA) 始終收不到資訊,後
EasyUI Datagrid 獲得選中行(CheckBox)的使用和獲取的資料不正常(資料缺失。。)的解決
checkOnSelect 當為True的時候,點每一行時CheckBox就會被選中;為False時,只能手動的點選CheckBox ;預設true; select
jqGrid 能獲取json 資料,前端資料顯示不出!(解決)
jqGrid 從後臺能獲取json 資料,但是前臺grid資料顯示不出!(最後朋友幫忙解決的) 一、首先要確認json格式要正確(是否拼接錯誤了) 格式不清楚的可以去百度一下。 二、錯誤處理 jQuery("#_lessonGrid")
spring-boot上傳文件MultiPartFile獲取不到文件問題解決
smu number o-c you output oar multi element cep 1.現象是在spring-boot裏加入commons-fileupload jar並且配置了mutilPart的bean,在upload的POST請求後,發現 multipa
hibernate 4.3 在使用獲取數據獲取不到數據庫中最新變更的數據問題解決
有效 ron www strong tail 版本 連接池 其它 ems hibernate 4.3 在使用獲取數據獲取不到數據庫中最新變更的數據問題解決,應該是因為緩存問題 問題過程和現象: 查詢一個數據列表=》數據庫中手動update了數據=》刷新頁面,數據顯示還是up
Spring MVC獲取不到post提交的multipart/form-data格式的資料
我們在寫介面時,經常會用postman測試介面。前段時間我寫介面時,發現post的form-data提交資料,後端竟然接收不到請求引數,而使用post的x-www-form-urlencoded方式提交資料,後端可以接收到引數。為什麼? postman的form-data是指mult
$_file獲取不到檔案資料
在form 表單中上傳檔案後可以在action:之後的檔案中用$_file查詢上傳檔案的資訊 。若上傳檔案的資訊為 :array{ } ; { } 內部無內容 返回 form表單中檢視 是否新增 屬性&
XAMPP裡的Tomcat修改了埠以後啟動Tomcat獲取不到狀態的解決
XAMPP V3.2.1安裝完畢,並且安裝了JDK7,啟動後,PHP和JSP訪問都能正常。 PHP執行在常規的80埠,JSP執行在預設的8080埠,即Tomcat配置的是8080埠。 改換Tomcat的埠,把
ajax post data 獲取不到資料,注意 content-type的設定 、post/get(轉)
ajax post data 獲取不到資料,注意 content-type的設定 、post/get 關於 jQuery data 傳遞資料。網上各種獲取不到資料,亂碼之類的。 好吧今天我也遇到了,網上一查各種糾結。亂碼不管先看獲取不到資料。 因為之前一直用jQuery ajax
利用C++獲取某一資料夾下的所有檔名,並獲取不帶字尾的檔名字
來源:https://www.cnblogs.com/fnlingnzb-learner/p/6424563.html 那麼到底如何查詢檔案呢?我們需要一個結構體和幾個大家可能不太熟悉的函式。這些函式和結構體在<io.h>的標頭檔案中, 結構體為struct _finddata_t
解決前端頁面獲取不到中文資料/無法顯示中文資料的方法
解決前端頁面獲取不到中文資料/無法顯示中文資料的方法 原因:Spring MVC 是基於Servlet,在Http請求到達Servlet解析之前,GET過來的URL已經被Tomcat先做了一次URLDecode。Tomcat對GET方式預設的URL解碼結果是iso-8859-1而不是UT
$('selector').serialize()方法獲取不到表單資料的錯誤
serialize() 方法通過序列化表單值,建立 URL 編碼文字字串。 例如:user=admin&password=admin&verify=abcd; 可以選擇一個或多個表單元素(比如 input 及/或 文字框),或者 form 元素本身。 序列化的值可在生成 AJ
正常啟動SparkStreaming之後,但是一直獲取不到資料
出現這樣子的問題之後,我們將setMaster的值進行了一點點的修改 local[2] 為什麼? 之前在進行setMaster的值時,當我們為local的時候,其實表示為local[1] 那麼就是告訴我們的程式,只執行一個處理執行緒。但是在現在通過socket的
axios傳送post請求java後端獲取不到資料原因及處理
場景/功能描述: 最近再學習前端的框架vue,發請求使用的是axios,自己簡單的寫了個後端,實現一個學生列表的crud,web層使用的是springmvc,並使用jq的$.ajax方式測試過介面沒問題。 出現的問題: 已經再次確保後端介面能接收jquery
微信小程式寫完之後的真機除錯獲取不到資料的問題
app.js中程式碼如下 import { Token } from 'utils/token-model.js'; var scence = 0; App({ onLaunch: function () { var that = this;
axios post 請求tomcat,攔截器獲取不到getInputStream流中的資料
今天做專案,前端的大佬用axios傳送post請求,而我要利用過濾器和攔截器進行許可權的校驗,校驗的內容就是上送的某個欄位的內容,所以我們需要重寫request請求(request請求只能獲取一次,如果在攔截器中獲取,那麼控制器就獲取不到相應的引數),並且在攔截器中進行校驗,
php表單提交時獲取不到post資料的解決方法
博主執行PHP環境:windows+phpstorm+xampp 初學php,用echo $_POST["variable"]和var_dump($_POST) 都獲取不到post資料。 解決方法如下: 1.找到php.ini 配置檔案,查詢enable_p
jqGrid 單元格編輯 如何手動結束編輯、重置單元格編輯狀態 getChangedCells獲取不到資料處理
在上篇博文:jqGrid 單元格編輯 自定義下拉選擇框 動態資料來源 通用實現,討論瞭如何用custom edittype實現一個通用的下拉選擇框編輯方案,本文討論的是單元格編輯的另外兩個問題:如何手動結束編輯和如何重置編輯狀態。 1、基於單元格編輯常見使用流程 1)構建jqgrid