国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

解決$GLOBALS["HTTP_RAW_POST_DATA"]獲取不到數據的問題

2019-11-09 15:03:47
字體:
來源:轉載
供稿:網友

昨天在微信中公眾號開發中使用$GLOBALS["HTTP_RAW_POST_DATA"]來獲取微信公眾平臺推送過來的post數據,結果驚奇的發現微信號總是提示“該微信公眾號暫時無法提供服務”,仔細去檢查代碼,也沒錯,可就是無法提供服務。今天又檢查了一把,還是沒有語法錯誤,于是乎,我將中間的所有數據全部寫到的記事本里去,通過及時本發現$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');


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 梅州市| 大宁县| 台州市| 兰溪市| 开原市| 长阳| 当阳市| 上犹县| 高雄县| 阿城市| 肇庆市| 甘泉县| 阿城市| 金塔县| 子洲县| 中江县| 丘北县| 油尖旺区| 黔西| 郴州市| 林口县| 嘉兴市| 原阳县| 搜索| 博兴县| 萨嘎县| 济阳县| 静宁县| 手游| 惠来县| 汤阴县| 莱芜市| 长宁县| 汝城县| 张家川| 察隅县| 新龙县| 灵川县| 齐河县| 璧山县| 拉萨市|