HTTP_RAW_POST_DATA浅析


一直没有用过HTTP_RAW_POST_DATA,但是经常看到有人用,比如微信的通知接口。

The RAW / uninterpreted HTTP POst information can be accessed with:
$GLOBALS['HTTP_RAW_POST_DATA']
This is useful in cases where the post Content-Type is not something PHP understands (such as text/xml).

也就是说,基本上$GLOBALS['HTTP_RAW_POST_DATA'] 和 $_POST是一样的。但是如果post过来的数据不是PHP能够识别的,你可以用 $GLOBALS['HTTP_RAW_POST_DATA']来接收,比如 text/xml 或者 soap 等等。

PHP默认识别的数据类型是application/x-www.form-urlencoded标准的数据类型

另外还有一项 php://input 也可以实现此这个功能

php://input 允许读取 POST 的原始数据。和 $HTTP_RAW_POST_DATA 比起来,它给内存带来的压力较小,并且不需要任何特殊的 php.ini 设置。php://input 不能用于 enctype="multipart/form-data"。

示例:

    var para = $('#xml').val();  
      
    $.ajax({  
                        url:"url/",  
                        data:para,  
                        dataType:'text',  
                        type:'POST',  
                        contentType:'text/xml',//指定发送信息至服务器时内容编码类型
                        success:function(txt){  
                                $('#response').text(txt);  
                            }  
                        });  
//两种方式等价,官方推荐使用第一个

$t1 = file_get_contents("php://input");

$t2 = $GLOBALS["HTTP_RAW_POST_DATA"];

Archives