如何使用$HTTP_RAW_POST_DATA?调用多种方式无返回结果求助
解决$HTTP_RAW_POST_DATA无法获取原始POST数据的问题
Hey there! Let's walk through why your current approach isn't working and how to fix it properly:
问题出在哪?
Let's break down each of your attempts and why they failed:
print_r($_POST['HTTP_RAW_POST_DATA']): 完全错误!$_POST数组只存储表单编码(application/x-www-form-urlencoded或multipart/form-data)的POST数据,而且HTTP_RAW_POST_DATA从来不是$_POST里的键——它是一个独立的全局变量(现在已经被废弃了)。$data = $HTTP_RAW_POST_DATA;: 这个变量在PHP 5.6及以后版本已经被废弃,而且它的存在依赖于php.ini里的always_populate_raw_post_data配置项。如果这个配置没开启,或者你用的是PHP 7+,这个变量根本不存在。print_r(file_get_contents('HTTP_RAW_POST_DATA')): 参数写错了!你应该用php://input这个特殊流,而不是字符串HTTP_RAW_POST_DATA。
正确的解决方案
不管你用哪个PHP版本,推荐的方式都是用php://input来获取原始POST数据——它是专门用来读取请求体的标准方式,不受配置影响,也没有废弃风险。
示例代码:
// 读取原始POST请求体 $rawPostData = file_get_contents('php://input'); // 如果你的请求是JSON格式,解析成数组(第二个参数true返回数组,否则是对象) $parsedData = json_decode($rawPostData, true); // 打印原始数据 print_r($rawPostData); // 打印解析后的JSON数据 print_r($parsedData);
额外注意事项
- 当你发送
application/json这类非表单编码的请求时,$_POST会是空的,这是正常现象——因为PHP只会自动解析表单编码的POST数据到$_POST里。 - 如果你还在使用PHP 5.6之前的老旧版本,非要用
$HTTP_RAW_POST_DATA的话,需要在php.ini里设置always_populate_raw_post_data = On,但真的强烈建议你升级PHP版本,旧版本已经没有安全维护了。
内容的提问来源于stack exchange,提问作者Utsav Chatterjee
相关产品推荐
相关产品推荐

