php获取post表单数据_PHP获取POST表单数据

php获取post表单数据,这是再正常不过的场景了,这里有几点需要注意,网上也都有提到。别人总结的毕竟不是自己的,为了体会这些注意点,我自己在本地搭建一个web application, 然后去验证。注意点是:

$_POST

file_get_contents("php://input")

$GLOBALS['HTTP_RAW_POST_DATA']

这三者到底有什么却别?上前端代码:

Username:

id="user_name" type="text" value="" />

Password:

id="passwd" class="tooltip" alt="Click to open the virtual keyboard" title="Click to open the virtual keyboard"

src="keyboard.png" />

上php代码:

var_dump($_POST);

var_dump(file_get_contents("php://input"));

var_dump($GLOBALS["HTTP_RAW_POST_DATA"]);

这三种获取POST表单数据的方式跟前端提交表单的enctype(entity-body coding type)有关系,浏览器会在request的Content-type字段给出post表单数据的编码方式。常见的编码方式:

1. URLencoded: application/x-www-form-urlencoded

2. Multipart: multipart/form-data

3. JSON: application/json

4. XML: text/xml

5. 纯文本: text/plain

在Web开发中,前三种格式非常常见。HTML中

支持urlencoded,multipart,plain text, 通过enctype属性来进行设置。AJAX中默认的则是JSON编码格式。我配置了下php.ini中的 always_populate_raw_post_data = On。测试结果如下:

content_type = application/x-www-form-urlencoded => $_POST 和 file_get_contents("php://input")都可以获取表单数据,至于$GLOBALS['HTTP_RAW_POST_DATA']能不能就得看php.ini的配置了。

content_type = multipart/form-data => file_get_contents("php://input") 和 $GLOBALS['HTTP_RAW_POST_DATA']都获取不到数据,但$_POST可以,这点结论与网上其他文章不一样

content_type = text/plain => $_POST获取不到数据,file_get_contents("php://input")和$GLOBALS['HTTP_RAW_POST_DATA']可以获取到

content_type = application/json => $_POST 和 file_get_contents("php://input")都可以获取表单数据, $GLOBALS['HTTP_RAW_POST_DATA']不行

这里简单记录下POST表单数据的读取问题,网上针对这个问题的文章很多,这里只是简单备忘和验证。

end~

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值