$mydata = $GLOBALS["HTTP_RAW_POST_DATA"];
$mydata = file_get_contents("php://input");
libxml_disable_entity_loader(true);
$mydata = simplexml_load_string($mydata, 'SimpleXMLElement', LIBXML_NOCDATA);
//记录日志s
error_log(json_encode($mydata,true)."\n", 3, "/home/wwwroot/default/demo/weixin.log");

 

 

今天在封装一个接口时,莫名其妙的看到了这样的一行代码:
 

     $data = file_get_contents("php://input");
   于是呢,我就把它剪切到test.php上输出了一下,发现什么也没有。哎,我就纳闷了,这是什么玩意儿?
   然后我就google了一下,php.net上说呢:
         php://input allows you to read raw data from the request body. In case of POST requests, it preferrable to $HTTP_RAW_POST_DATA as it does not depend on special php.ini directives. Moreover, for those cases where $HTTP_RAW_POST_DATA is not populated by default, it is a potentially less memory intensive alternative to activating always_populate_raw_post_data. php://input is not available with enctype="multipart/form-data".
    意思是:php:// 允许你读取表单中POST请求的原数据,跟$HTTP_RAW_POST_DATA比起来呢要更好使,不需要去php的配置文件里去设置参数。正因如 此,php://比$HTTP_RAW_POST_DATA更讨人喜欢,它比激活always_populate_raw_post_data要更节省内 存资源。但是php://input 不可以接有enctype="multipart/form-data 的POST数据。
      
那么 $_POST 与 php:// 又有什么区别呢?
    1.
$_POST 以关联数组方式组织提交的数据,并对原数据进行编码处理(urldecode)和编码转换。
      php://input 可通过输入流以文件读取方式取得未经处理的POST原始数据
    2.enctype = application/x-www-data-urlencoded(默认)和multipart/form-data时,$_POST可以成功取到传值。
      但是php://只有当enctype =
application/x-www-data-urlencoded 时,可以成功接到传值。
  当
PHP不能识别的Content-Type类型的时候,会将http请求包中相应的数据填入变量$HTTP_RAW_POST_DATA