php://input $_post,$_POST,$HTTP_RAW_POST_DATA和php://input 的区别

当在网页提交了一个表单之后,可以使用三种PHP方式来获取 Post数据据:$_POST,$HTTP_RAW_POST_DATA和php://input,那么这三者之间有什么区别呢,下面让我们逐一分析:

一、$_POST

$_POST 是获取表单 POST 过来数据(body部分)的最常用方法,上传的文件信息使用 $_FILES 获取。

二、$HTTP_RAW_POST_DATA

当浏览器从表单发送 POST 请求的时候,默认的 media type 是

“application/x-www-form-urlencoded”,意思就是字段名和值都编码了,每个 key-value 对使用

‘&’ 字符分隔开,key 和 value 使用 ‘=’ 分开,并且 key 和 value 中的空格都会被替换成 +

,其他特殊字符都会被使用 urlencode 方式进行编码。但是$HTTP_RAW_POST_DATA 需要在 php.ini 中设置开启:always_populate_raw_post_data = On

$HTTP_RAW_POST_DATA 不支持 enctype=”multipart/form-data” 方式传递的数据,这种情况下,我们要用 $_POST 获取字段的内容,$_FILES 来获取上传的文件信息。

三、php://input

由于$HTTP_RAW_POST_DATA 取决于 php.ini 设置,有没有更好的方法呢?

我们可以使用 php://input 来获取原始的 POST 数据,并且 php://input 比

$HTTP_RAW_POST_DATA 更少消耗内存,当然 php://input 和 $HTTP_RAW_POST_DATA 一样,它也不支持

enctype=”multipart/form-data” 方式传递的数据。

由于 php://input 只是数据流,我们可以使用 file_get_contents() 函数去获取它的内容:

$post_data = file_get_contents('php://input');print_r($post_data);

获取到的内容和 $HTTP_RAW_POST_DATA 是一样的。

四、原始的 POST 数据有什么用?

那么原始的 POST 数据有什么用?因为很多时候,接收到不是网页 POST 过来的数据,而是可能通过其他方式 POST 过来的 “text/xml” 格式的数据,这些内容无法解析成 $_POST 数组,这个时候我们就需要原始的 POST 数据进行处理。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值