通过 HTTP 2757comPOST 方法传递的变量组成的数组,也就是表单POST过来的数据

PHP怎么着获得表单的POST数据吧?本文介绍3种得到POST数据的主意,并将代码附上,希望能够支持到你。

$_POST[‘fieldname’]

说明:
只得接收Content-Type:application/x-www-form-urlencoded提交的多少
解释:
也便是表单POST过来的数据

一、PHP获取POST数据的两种办法

办法1、最习以为常的章程是:$_POST[‘fieldname’];

证实:只好收取Content-Type:
application/x-www-form-urlencoded提交的数目
解说:也等于表单POST过来的多少

方法2、file_get_contents(“php://input”);

说明:

允许读取 POST 的本来面目数据。
和 $HTTP_RAW_POST_DATA
比起来,它给内部存款和储蓄器带给的下压力很小,况且无需任何异样的 php.ini 设置。
php://input 不能够用于 enctype=”multipart/form-data”。

解释:

对于未内定 Content-Type
的POST数据,则足以选取file_get_contents(“php://input”State of Qatar;来收获原始数据。
实质上,用PHP接受POST的别样数据都得以动用本办法。而不用思谋Content-Type,包含二进制文件流也足以。
故此用艺术二是最保险的主意

方法3、$GLOBALS[‘HTTP_RAW_POST_DATA’];

说明:

连年发出 $HTTP_RAW_POST_DATA  变量满含有原始的 POST 数据。
此变量仅在境遇未识别 MIME 类型的数目时发生。
$HTTP_RAW_POST_DATA  对于 enctype=”multipart/form-data” 
表单数据不可用
若果post过来的数量不是PHP能够识其他,能够用
$GLOBALS[‘HTTP_RAW_POST_DATA’]来接收,
比如 text/xml 或者 soap 等等

解释:

$GLOBALS[‘HTTP_RAW_POST_DATA’]存放的是POST过来的原有数据。
$_POST或$_REQUEST贮存的是 PHP以key=>value的款型格式化以往的数量。
但$GLOBALS[‘HTTP_RAW_POST_DATA’]中是还是不是保存POST过来的多少在于centent-Type的安装,即POST数据时
必需显式示指明Content-Type:
application/x-www-form-urlencoded,POST的多寡才会寄放到
$GLOBALS[‘HTTP_RAW_POST_DATA’]中

file_get_contents(“php://input”);

说明:
同意读取POST的原来数据。
和$HTTP_RAW_POST_DATA比起来,它给内存带给的压力相当小,何况无需其余特殊的php.ini设置。
php://input不可能用来enctype=”multipart/form-data”。
解释:
对此未钦赐Content-Type的POST数据,则可以利用file_get_content(“php://input”卡塔尔国;来得到原始数据。
其实,用PHP选用POST的其余数据都得以应用本办法。而而不是构思Content-Type,满含二进制文件流也足以。
就此用艺术二是最保障的方法。

$_POST:通过 HTTP POST 方法传递的变量组成的数组。是机动全局变量。

二、演示

1、PHP 怎么样获得POST过来的XML数据和解析XML数据

诸如大家在付出微信公司号时,如哪个地方理顾客回复过来的数量吧?
文档:
首先查看文书档案,可掌握:启用开拓形式后,当客户给接收回复新闻时,Wechat服务端会POST一串XML数据到已表达的回调UGL450L

假设该URL为 http://www.xxx.com
Http必要方式: POST
http://www.xxx.com/?msg\_signature=ASDFQWEXZCVAQFASDFASDFSS×tamp=13500001234&nonce=123412323

POST的XML内容为:

<xml>
   <ToUserName><![CDATA[toUser]]></ToUserName>
   <FromUserName><![CDATA[fromUser]]></FromUserName> 
   <CreateTime>1348831860</CreateTime>
   <MsgType><![CDATA[text]]></MsgType>
   <Content><![CDATA[this is a test]]></Content>
   <MsgId>1234567890123456</MsgId>
   <AgentID>1</AgentID>
</xml>

那就是说怎么采纳这段内容呃?
那个时候就能够用到:方法2(file_get_contents(“php://input”))、方法3($GLOBALS[‘HTTP_RAW_POST_DATA’])

方法2(file_get_contents(“php://input”)):

$input = file_get_contents("php://input"); //接收POST数据
$xml = simplexml_load_string($input); //提取POST数据为simplexml对象
var_dump($xml);

方法3($GLOBALS[‘HTTP_RAW_POST_DATA’])

$input = $GLOBALS['HTTP_RAW_POST_DATA'];
libxml_disable_entity_loader(true);
$xml = simplexml_load_string($input, 'SimpleXMLElement', LIBXML_NOCDATA);
var_dump($xml);

PHP获取POST数据的3种艺术及其代码解析,希望能够帮到你。

$GLOBALS[‘HTTP_RAW_POST_DATA’];

说明:
连年产生$HTTP_RAW_POST_DATA变量饱含有原始的POST数据。
此变量仅在遭受未识别MIME类型的多少时发生。
$HTTP_RAW_POST_DATA对于enctype=”multipart/form-data”表单数据不可用。
若是post过来的数额不是PHP能够识别的,能够用$GLOBALS[‘HTTP_RAW_POST_DATA’]来接收,比如text/xml或者soap等等
解释:
$GLOBALS[‘HTTP_RAW_POST_DATA’]存放的是POST过来的庐山面目目数据。
$_POST或$_REQUEST贮存的是PHP以key=>value的款型格式化未来的数额。
但$GLOBALS[‘HTTP_RAW_POST_DATA’]中是否保存POST过来的数据在于centent-Type的设置,即POST数据时,必需显式指明Content-Type:application/x-www-form-urlencoded,POST的数目才会寄放到$GLOBALS[‘HTTP_RAW_POST_DATA’]中。

$GLOBALS[‘HTTP_RAW_POST_DATA’] :总是发出 $HTTP_RAW_POST_DATA
变量饱含有原来的 POST 数据。此变量仅在碰着未识别 MIME 类型的数目时发生。

$HTTP_RAW_POST_DATA 对于 enctype=”multipart/form-data”
表单数据不可用。

也正是说基本上$GLOBALS[‘HTTP_RAW_POST_DATA’] 和 $_POST是同一的。

可是即使post过来的多少不是PHP可以识别的,你可以用
$GLOBALS[‘HTTP_RAW_POST_DATA’]来接收,比如 text/xml 或者 soap
等等。

添补表明:PHP默许识其他数据类型是application/x-www.form-urlencoded典型的数据类型。

发表评论

电子邮件地址不会被公开。 必填项已用*标注