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

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

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

我的问题是从这个答案中得到启发: 如何使用curl将JSON发布到PHP

他说:

从协议的angular度来看, file_get_contents("php://input")实际上是更正确的,因为无论如何你并没有真正处理http多部分表单数据。

实际上php://input允许你读取原始的POST数据。

对于$ HTTP_RAW_POST_DATA来说这是一个内存密集的替代scheme,不需要任何特殊的php.ini指令

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

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

php://input是一个只读stream,允许您从请求主体读取原始数据。 在POST请求的情况下,最好使用php://input而不是$ HTTP_RAW_POST_DATA,因为它不依赖于特殊的php.ini指令 。 而且,对于缺省情况下$ HTTP_RAW_POST_DATA未被填充的情况,这对于激活always_populate_raw_post_data是一个潜在的更less内存密集的select。

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

file_get_contents(php://input) – 获取原始的POST数据,当您编写API时需要使用这个数据,并且需要XML / JSON / …input,这些input不能通过PHP解码为$ _POST。例如:

通过邮件发送JSONstring

 <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> 

1.PHP

 //print_r($_POST); //empty!!! don't work ... var_dump( file_get_contents('php://input')); 

通常的规则应该适用于你如何发送请求。 如果请求是检索信息(例如,部分search'提示'结果,或者要显示的新页面等等),则可以使用GET。 如果要发送的数据是请求更改内容(更新数据库,删除logging等)的一部分,则使用POST。

服务器端,没有理由使用原始input,除非你想一次抓取整个post / get数据块。 您可以像平常一样通过_GET / _POST数组检索您想要的特定信息。 诸如MooTools / jQuery之类的AJAX库将处理实际AJAX调用和将表单数据编码为适当格式的难题。

对于JSON数据,将其作为“application / json”内容types进行发布要容易得多。 如果你使用GET,你必须在参数中对JSON进行URL编码,这是一种混乱。 另外,当你做POST时没有大小限制。 GET的大小如果非常有限(最多4K)。

第二个问题很简单,在服务器端和浏览器端,GET的大小限制为1-2千字节,因此您需要通过POST发送大量的数据。