file_get_contents("php:// input")或$ HTTP_RAW_POST_DATA,哪一个更好地获取JSON请求的主体?

Man*_*tto 112 php json xmlhttprequest

file_get_contents("php://input")或者$HTTP_RAW_POST_DATA- 哪一个更好地获得JSON请求的主体?

在使用客户端时,我应该使用哪种请求类型(GETPOST)来发送JSON数据XmlHTTPRequest

我的问题来自这个答案: 如何使用curl将JSON发布到PHP

从那个回答引用:

从协议的角度来看file_get_contents("php://input")实际上更正确,因为你还没有真正处理http多部分表单数据.

zaf*_*zaf 189

实际上php://input允许您读取原始POST数据.

它是$ HTTP_RAW_POST_DATA的内存密集型替代品,不需要任何特殊的php.ini指令.

php://input不适用enctype="multipart/form-data".

参考: http ://php.net/manual/en/wrappers.php.php

  • 此外,从PHP 5.6开始,`$ HTTP_RAW_POST_DATA`被认为已弃用,并且`php:// input`可以重复使用. (12认同)
  • 从来没有听说过这种方法来检索数据,很棒的答案! (10认同)

小智 15

php:// input是一个只读流,允许您从请求正文中读取原始数据.在POST请求的情况下,最好使用php:// input而不是$ HTTP_RAW_POST_DATA,因为它不依赖于特殊的php.ini指令.此外,对于默认情况下未填充$ HTTP_RAW_POST_DATA的情况,它可能是激活always_populate_raw_post_data的内存密集型替代方案.

资料来源:http://php.net/manual/en/wrappers.php.php.

  • 此外,从PHP 5.6开始,`$ HTTP_RAW_POST_DATA`被认为已弃用,并且`php:// input`可以重复使用. (4认同)

zlo*_*ctb 11

file_get_contents(php:// input) - 获取原始POST数据,你需要在编写API时使用它,并且需要XML/JSON/...输入,这些输入无法通过PHP解码为$ _POST 一些例子:

通过邮寄JSON字符串发送

<input type="button" value= "click" onclick="fn()">
<script>
 function fn(){


    var js_obj = {plugin: 'jquery-json', version: 2.3};

    var encoded = JSON.stringify( js_obj );

var data= encoded


    $.ajax({
  type: "POST",
  url: '1.php',
  data: data,
  success: function(data){
    console.log(data);
  }

});

    }
</script>
Run Code Online (Sandbox Code Playgroud)

1.PHP

//print_r($_POST); //empty!!! don't work ... 
var_dump( file_get_contents('php://input'));
Run Code Online (Sandbox Code Playgroud)