dmz社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 8202|回复: 80

[php知识] $_POST, $HTTP_RAW_POST_DATA, and php://input

  [复制链接]
  • TA的每日心情

    2024-11-19 20:46
  • 签到天数: 244 天

    [LV.8]以坛为家I

    4434

    主题

    1459

    帖子

    1万

    积分

    会|员

    Rank: 9Rank: 9Rank: 9

    积分
    10734
    发表于 2019-1-17 00:04:05 | 显示全部楼层 |阅读模式

    本站资源全部免费,回复即可查看下载地址!

    您需要 登录 才可以下载或查看,没有帐号?立即注册

    x
    1、HTML <form> enctype Attribute
    • application/x-www-form-urlencoded  传送之前所有的字符都会被encoded,(spaces 被转换为+、特殊字符被转换为ASCII HEX)
    • multipart/form-data  没有字符被encoded,一般用upload
    • text/plain Spaces被转换为 + ,但是特殊字符不会被encoded
    For example, the key-value pairs
    [AppleScript] 纯文本查看 复制代码
    name: Jonathan Doe
    age: 23
    formula: a + b == 13%!


    are encoded as the following raw data:
    [AppleScript] 纯文本查看 复制代码
    name=Jonathan+Doe&age=23&formula=a+%2B+b+%3D%3D+13%25%21

    $_POST
    [AppleScript] 纯文本查看 复制代码
    Array
    (
        [name] => Jonathan Doe
        [age] => 23
        [formula] => a + b == 13%!
    )


    $HTTP_RAW_POST_DATA
    [AppleScript] 纯文本查看 复制代码
    print_r($GLOBALS['HTTP_RAW_POST_DATA'] );
    name=Jonathan+Doe&age=23&formula=a+%2B+b+%3D%3D+13%25%21


    php://input
    [AppleScript] 纯文本查看 复制代码
    $post_data = file_get_contents('php://input');
    print_r($post_data);
     
    name=Jonathan+Doe&age=23&formula=a+%2B+b+%3D%3D+13%25%21


    2、$_POST
    $_POST是最常用的获取表单的方式,它是以关联数组方式组织提交的数据,并对此进行编码处理,如urldecode,甚至编码转换,识别的数据类型是PHP默认识别的数据类型 application/x-www.form-urlencoded
    无法解析如text/xml,application/json等非 application/x-www.form-urlencoded 数据类型的内容


    3、$HTTP_RAW_POST_DATA
    PHP默认识别的数据类型是application/x-www.form-urlencoded,用Content-Type=application/json 类型,提交的POST数据这时候 <span class="MathJax" id="MathJax-Element-2-Frame" tabindex="0" data-mathml="POST就无法获取到了,但是使用" role="presentation" style="display: inline; line-height: normal; word-spacing: normal; overflow-wrap: normal; white-space: nowrap; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border: 0px; position: relative;">POST就无法获取到了,但是使用POST就无法获取到了,但是使用GLOBALS['HTTP_RAW_POST_DATA'] 可以获取到。因为在PHP无法识别Content-Type的时候,就会把 POST 数据填入到 $HTTP_RAW_POST_DATA 中。
    • 设置 php.ini 中的 always_populate_raw_post_data 值为 On 才会生效
    • 当<span class="MathJax" id="MathJax-Element-3-Frame" tabindex="0" data-mathml="POST可以取到值时" role="presentation" style="display: inline; line-height: normal; word-spacing: normal; overflow-wrap: normal; white-space: nowrap; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border: 0px; position: relative;">POST可以取到值时POST可以取到值时HTTP_RAW_POST_DATA 为空
    • 不能用于 enctype="multipart/form-data"
    • PHP7中已经移除了这个全局变量,用 php://input 替代,使用 always_populate_raw_post_data 会导致在填充 $HTTP_RAW_POST_DATA 时产生 E_DEPRECATED 错误。 请使用php://input 替代 $HTTP_RAW_POST_DATA, 因为它可能在后续的 PHP 版本中被移除。 设置always_populate_raw_post_data-1 (这样会强制 $HTTP_RAW_POST_DATA 未定义,所以也不回导致 E_DEPRECATED的错误) 来体验新的行为。

    4、php://input
    php://input 可通过输入流以文件读取方式取得未经处理的POST原始数据,允许读取 POST 的原始数据。和 $HTTP_RAW_POST_DATA 比起来,它给内存带来的压力较小。
    • 不需要任何特殊的 php.ini 设置
    • 不能用于 enctype="multipart/form-data"


    总结
    1、如果是 multipart/form-data  和 application/x-www-form-urlencoded 格式 用 $_POST
    2、如果不能获取的时候比如 application/json 使用 file_get_contents('php://input')
    回复

    使用道具 举报

    该用户从未签到

    23

    主题

    7844

    帖子

    984

    积分

    终身会员[A]

    Rank: 7Rank: 7Rank: 7

    积分
    984

    发表于 2019-1-20 00:09:29 | 显示全部楼层
    支持一下:lol
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    22

    主题

    7969

    帖子

    917

    积分

    终身会员[A]

    Rank: 7Rank: 7Rank: 7

    积分
    917

    发表于 2019-1-20 01:36:29 | 显示全部楼层
    学习了,谢谢分享、、、
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    15

    主题

    7875

    帖子

    966

    积分

    荣誉会员

    积分
    966

    发表于 2019-1-22 16:54:12 | 显示全部楼层
    我是来刷分的,嘿嘿
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    3

    主题

    3508

    帖子

    2

    积分

    终身会员[A]

    Rank: 7Rank: 7Rank: 7

    积分
    2

    发表于 2019-1-22 17:43:25 | 显示全部楼层
    有道理。。。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    1

    主题

    3500

    帖子

    -6

    积分

    终身会员[A]

    Rank: 7Rank: 7Rank: 7

    积分
    -6

    发表于 2019-1-23 12:22:23 | 显示全部楼层
    珍惜生命,果断回帖。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    21

    主题

    7719

    帖子

    998

    积分

    终身会员[A]

    Rank: 7Rank: 7Rank: 7

    积分
    998

    发表于 2019-1-30 14:06:03 | 显示全部楼层
    谢谢楼主,共同发展
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    5

    主题

    3481

    帖子

    4

    积分

    终身会员[A]

    Rank: 7Rank: 7Rank: 7

    积分
    4

    发表于 2019-1-31 16:49:54 | 显示全部楼层
    支持一下:lol
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    22

    主题

    7846

    帖子

    992

    积分

    终身会员[A]

    Rank: 7Rank: 7Rank: 7

    积分
    992

    发表于 2019-2-1 15:58:35 | 显示全部楼层
    路过,学习下
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    17

    主题

    7762

    帖子

    971

    积分

    终身会员[A]

    Rank: 7Rank: 7Rank: 7

    积分
    971

    发表于 2019-2-4 20:00:50 | 显示全部楼层
    路过,学习下
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|小黑屋|本站代理|dmz社区

    GMT+8, 2024-12-24 00:28 , Processed in 0.203315 second(s), 42 queries .

    Powered by Discuz! X3.4 Licensed

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表