thinkphp 接受post请求的xml数据
作者寄语:
cxword工作室 -网址:http://www.cxword.top
在不同语言写接口是一件很繁琐的事,他的说的你不懂,你说的他不懂,我不知道php的数据流,就写过上传图片走的数据流,然后传递数据,流的方式还真的不会,或许是简化了吧。
如标题,我记录下java调用php接口,以xm
首先传递方式都会是post,那么php接受post一般会有三种形式:
第一种:$_POST或为I('post.')
这种方式是比较熟悉的,很常用,也就是表单POST过来的数据。但注意,接口不一定就是表单提交,如果GET形式,可能会用的到。说的深沉一点:只能接收Content-Type: application/x-www-form-urlencoded提交的数据
第二种:file_get_contents("php://input");
这种方式,我就用的很少,只是了解一点,说是对于未指定 Content-Type 的POST数据,则可以使用file_get_contents(“php://input”);来获取原始数据。
事实上,用PHP接收POST的任何数据都可以使用本方法。而不用考虑Content-Type,包括二进制文件流也可以。
通俗点,这种方式就是第一种方式的加强版,任何未定义的POST都可以提交,是一种保险形式。
第三种:$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/xm
解释:
$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'],然后你得到的就是整个xm
粘贴部分代码
$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
if (isset($postStr)) {
$xm
//返回结果解析(转换json格式)
$json = get_ob
$arr = $this->xm
$key = array_keys($arr);
//自定义函数
// xm
public function xm
{
$reg = "/<(\\w+)[^>]*?>([\\x00-\\xFF]*?)<\\/\\1>/";
if(preg_match_all($reg, $xm
{
$count = count($matches[0]);
$arr = array();
for($i = 0; $i < $count; $i++)
{
$key = $matches[1][$i];
$val = $this->xm
if(array_key_exists($key, $arr))
{
if(is_array($arr[$key]))
{
if(!array_key_exists(0,$arr[$key]))
{
$arr[$key] = array($arr[$key]);
}
}else{
$arr[$key] = array($arr[$key]);
}
$arr[$key][] = $val;
}else{
$arr[$key] = $val;
}
}
return $arr;
}else{
return $xm
}
}
可伶返回,我使用return不了,居然是自己定义一个xm