$_POST 、$HTTP_RAW_POST_DATA、php://input三者之间的区别

本文详细介绍了PHP中如何获取POST数据,特别是对比了$HTTP_RAW_POST_DATA与php://input两种方式的特点及适用场景,并讨论了不同enctype属性下数据获取的有效性。


HTTP_RAW_POST_DATA

官方文档解释:原生POST数据。需要通过php.ini开启,开启后可通过全局变量 $GLOBALS['HTTP_RAW_POST_DATA'] 获取到post数据。

  • 需要设置 php.ini 中的 always_populate_raw_post_data 值为 On 才会生效

  • 不能用于 enctype="multipart/form-data"

  • PHP7中已经移除了这个全局变量,用 php://input 替代

  • 相比php://input 需要更多的内存


php://input

php://input 访问各个输入/输出流。允许访问 PHP 的输入输出流、标准输入输出和错误描述符, 内存中、磁盘备份的临时文件流以及可以操作其他读取写入文件资源的过滤器。POST 请求的情况下,最好使用php://input 来代替 $HTTP_RAW_POST_DATA,因为它不依赖于特定的php.ini 指令。 而且,这样的情况下 $HTTP_RAW_POST_DATA 默认没有填充, 比激活always_populate_raw_post_data 潜在需要更少的内存。 enctype="multipart/form-data" 的时候php://input 是无效的

  • 不需要任何特殊的 php.ini 设置

  • 不能用于 enctype="multipart/form-data"

  • 数据获取方式 :$data =  file_get_contents("php://input");


$_POST

可以看成是把$HTTP_RAW_POST_DATA过滤和格式化后的数据。识别的数据类型是PHP默认识别的数据类型 application/x-www.form-urlencoded

  • 无法解析如text/xml,application/json等非 application/x-www.form-urlencoded 数据类型的内容

  • 经验证不能用于enctype="text/plain"   
  • 经验证可用于enctype="multipart/form-data"

参考:

http://php.net/manual/zh/wrappers.php.php

http://www.php.net/manual/zh/reserved.variables.post.php

http://php.net/manual/zh/reserved.variables.httprawpostdata.php


原文地址:





HTTP_RAW_POST_DATA

官方文档解释:原生POST数据。需要通过php.ini开启,开启后可通过全局变量 $GLOBALS['HTTP_RAW_POST_DATA'] 获取到post数据。

  • 需要设置 php.ini 中的 always_populate_raw_post_data 值为 On 才会生效

  • 不能用于 enctype="multipart/form-data"

  • PHP7中已经移除了这个全局变量,用 php://input 替代

  • 相比php://input 需要更多的内存


php://input

php://input 访问各个输入/输出流。允许访问 PHP 的输入输出流、标准输入输出和错误描述符, 内存中、磁盘备份的临时文件流以及可以操作其他读取写入文件资源的过滤器。POST 请求的情况下,最好使用php://input 来代替 $HTTP_RAW_POST_DATA,因为它不依赖于特定的php.ini 指令。 而且,这样的情况下 $HTTP_RAW_POST_DATA 默认没有填充, 比激活always_populate_raw_post_data 潜在需要更少的内存。 enctype="multipart/form-data" 的时候php://input 是无效的

  • 不需要任何特殊的 php.ini 设置

  • 不能用于 enctype="multipart/form-data"

  • 数据获取方式 :$data =  file_get_contents("php://input");


$_POST

可以看成是把$HTTP_RAW_POST_DATA过滤和格式化后的数据。识别的数据类型是PHP默认识别的数据类型 application/x-www.form-urlencoded

  • 无法解析如text/xml,application/json等非 application/x-www.form-urlencoded 数据类型的内容

  • 经验证不能用于enctype="text/plain"   
  • 经验证可用于enctype="multipart/form-data"

参考:

http://php.net/manual/zh/wrappers.php.php

http://www.php.net/manual/zh/reserved.variables.post.php

http://php.net/manual/zh/reserved.variables.httprawpostdata.php

原文地址:
https://blog.youkuaiyun.com/kexiaoling/article/details/51858909





HTTP_RAW_POST_DATA

官方文档解释:原生POST数据。需要通过php.ini开启,开启后可通过全局变量 $GLOBALS['HTTP_RAW_POST_DATA'] 获取到post数据。

  • 需要设置 php.ini 中的 always_populate_raw_post_data 值为 On 才会生效

  • 不能用于 enctype="multipart/form-data"

  • PHP7中已经移除了这个全局变量,用 php://input 替代

  • 相比php://input 需要更多的内存


php://input

php://input 访问各个输入/输出流。允许访问 PHP 的输入输出流、标准输入输出和错误描述符, 内存中、磁盘备份的临时文件流以及可以操作其他读取写入文件资源的过滤器。POST 请求的情况下,最好使用php://input 来代替 $HTTP_RAW_POST_DATA,因为它不依赖于特定的php.ini 指令。 而且,这样的情况下 $HTTP_RAW_POST_DATA 默认没有填充, 比激活always_populate_raw_post_data 潜在需要更少的内存。 enctype="multipart/form-data" 的时候php://input 是无效的

  • 不需要任何特殊的 php.ini 设置

  • 不能用于 enctype="multipart/form-data"

  • 数据获取方式 :$data =  file_get_contents("php://input");


$_POST

可以看成是把$HTTP_RAW_POST_DATA过滤和格式化后的数据。识别的数据类型是PHP默认识别的数据类型 application/x-www.form-urlencoded

  • 无法解析如text/xml,application/json等非 application/x-www.form-urlencoded 数据类型的内容

  • 经验证不能用于enctype="text/plain"   
  • 经验证可用于enctype="multipart/form-data"

参考:

http://php.net/manual/zh/wrappers.php.php

http://www.php.net/manual/zh/reserved.variables.post.php

http://php.net/manual/zh/reserved.variables.httprawpostdata.php

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值