PHP获取POST表单数据

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

$_POST
file_get_contents("php://input")
$GLOBALS['HTTP_RAW_POST_DATA']

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

Click to open the virtual keyboard

上php代码:

这三种获取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~

你可能感兴趣的:(PHP获取POST表单数据)