$GLOBALS['HTTP_RAW_POST_DATA'] 和$_POST的区别

 

$_POST:通过 HTTP POST 方法传递的变量组成的数组。是自动全局变量。

$GLOBALS['HTTP_RAW_POST_DATA'] :总是产生 $HTTP_RAW_POST_DATA 变量包含有原始的 POST 数据。此变量仅在碰到未识别 MIME 类型的数据时产生。$HTTP_RAW_POST_DATA 对于 enctype="multipart/form-data" 表单数据不可用。

也就是说基本上$GLOBALS['HTTP_RAW_POST_DATA'] 和 $_POST是一样的。

但是如果post过来的数据不是PHP能够识别的,你可以用 $GLOBALS['HTTP_RAW_POST_DATA']来接收,比如 text/xml 或者 soap 等等。

 

补充说明:PHP默认识别的数据类型是application/x-www.form-urlencoded标准的数据类型。



***********************************************************************************

这是手册里写的

总是产生变量包含有原始的 POST 数据。否则,此变量仅在碰到未识别 MIME 类型的数据时产生。不过,访问原始 POST 数据的更好方法是 php://input。$HTTP_RAW_POST_DATA 对于 enctype="multipart/form-data" 表单数据不可用。

问题: $HTTP_RAW_POST_DATA == $_POST 吗?

照手册所写 ,答案应该就为否。
假如不一样的话,他们的区别是什么呢?


我知道答案了,如下:

The RAW / uninterpreted HTTP POst information can be accessed with:
$GLOBALS['HTTP_RAW_POST_DATA']
This is useful in cases where the post Content-Type is not something PHP understands (such as text/xml).

也就是说,基本上$GLOBALS['HTTP_RAW_POST_DATA'] 和 $_POST是一样的。但是如果post过来的数据不是PHP能够识别的,你可以用 $GLOBALS['HTTP_RAW_POST_DATA']来接收,比如 text/xml 或者 soap 等等。

PHP默认识别的数据类型是application/x-www.form-urlencoded标准的数据类型

用Content-Type=text/xml 类型,提交一个xml文档内容给了php server,要怎么获得这个POST数据。

The RAW / uninterpreted HTTP POST information can be accessed with: $GLOBALS['HTTP_RAW_POST_DATA'] This is useful in cases where the post Content-Type is not something PHP understands (such as text/xml).

由于PHP默认只识别application/x-www.form-urlencoded标准的数据类型,因此,对型如text/xml的内容无法解析为$_POST数组,故保留原型,交给$GLOBALS['HTTP_RAW_POST_DATA'] 来接收。

另外还有一项 php://input 也可以实现此这个功能

php://input 允许读取 POST 的原始数据。和 $HTTP_RAW_POST_DATA 比起来,它给内存带来的压力较小,并且不需要任何特殊的 php.ini 设置。php://input 不能用于 enctype="multipart/form-data"。


应用


a.htm
------------------
<form action="post.php" method="post">
<input type="text" name="user">
<input type="password" name="password">
<input type="submit">
</form>

post.php
----------------------------
<? echo file_get_contents("php://input"); ?>









### HTTP POST 请求接收处理数据的方式 HTTP POST 方法是一种常用的请求方式,主要用于向服务器发送数据。以下是几种常见的方式来接收处理通过 POST 提交的数据: #### 使用 PHP 接收 POST 数据 PHP 中可以通过 `$_POST` 超全局变量来访问通过表单提交的 POST 数据。如果需要读取原始 POST 数据,则可以使用 `$GLOBALS['HTTP_RAW_POST_DATA']` 或者 `php://input`。 以下是一个简单的示例代码展示这三种不同的方式[^1]: ```php <?php // 方式一:使用 $_POST 获取表单数据 if (!empty($_POST)) { echo "接收到的 POST 数据:" . json_encode($_POST); } // 方式二:使用 $GLOBALS['HTTP_RAW_POST_DATA'] if (isset($GLOBALS['HTTP_RAW_POST_DATA'])) { echo "接收到的原始 POST 数据:" . $GLOBALS['HTTP_RAW_POST_DATA']; } // 方式三:使用 php://input 流 $inputData = file_get_contents('php://input'); echo "通过 php://input 读取到的数据:" . $inputData; ?> ``` #### 支持更多 HTTP 方法的情况 除了 GET POST 外,现代 Web 开发还可能涉及其他 HTTP 方法(如 DELETE、PUT 等)。然而由于大多数浏览器仅原生支持 GET POST 方法,因此通常借助框架功能实现对这些方法的支持。例如 Spring 框架中的 `HiddenHttpMethodFilter` 可以让开发者通过设置 `_method` 参数模拟 PUT/DELETE 等操作[^2]。 #### Content-Type 的作用 无论采用哪种技术栈,理解 `Content-Type` 是非常重要的。它定义了消息体的内容编码形式,在 request headers response headers 都可能出现该字段。对于 JSON 格式的 POST 请求来说,客户端应该将此头设为 `application/json`;而对于传统的 HTML 表单,默认情况下则是 `application/x-www-form-urlencoded` 或者 `multipart/form-data`[^3]。 ### 总结 综上所述,当涉及到如何利用 HTTP POST 来获取并解析传入的信息时,可以根据具体需求选用合适的工具技术手段完成任务。无论是基础的语言特性还是高级的应用程序架构设计模式都可以帮助我们更好地理解实践这一过程。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值