файл get contents ("php: / / input") или $HTTP RAW POST DATA, какой из них лучше получить тело запроса JSON?


file_get_contents("php://input") или $HTTP_RAW_POST_DATA - какой из них лучше получить тело запроса JSON?

и какой тип запроса (GET или POST) должен ли я использовать для отправки данных JSON при использовании клиентской стороны XmlHTTPRequest?

мой вопрос был вдохновлен этим ответом: Как разместить JSON на PHP с curl

цитата из этого ответа:

С точки зрения протокола file_get_contents("php://input") на самом деле более правильно, так как вы на самом деле не обрабатываете http multipart form данные в любом случае.

6 98

6 ответов:

на самом деле php://input позволяет читать необработанные данные POST.

это менее интенсивная альтернатива памяти $HTTP_RAW_POST_DATA и не требует специального php.ini директивы.

php://input не работает с enctype="multipart/form-data".

ссылки:http://php.net/manual/en/wrappers.php.php

php: / / input is a только для чтения поток, который позволяет считывать необработанные данные из тела запроса. В случае POST-запросов предпочтительней чтобы использовать php: / / input вместо $HTTP_RAW_POST_DATA как это не зависит от специального php.ini директивы. Более того, для этих случаев где $HTTP_RAW_POST_DATA не заполняется по умолчанию, это a потенциально менее интенсивная альтернатива активации памяти always_populate_raw_post_data.

Источник:http://php.net/manual/en/wrappers.php.php.

file_get_contents (php://input) - получает необработанные данные POST, и вам нужно использовать это при написании API и необходимости XML/JSON/... ввод, который не может быть декодирован в $_POST с помощью PHP вот пример:

отправить по почте JSON string

<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'));

обычные правила должны применяться для того, как вы отправите запрос. Если запрос должен получить информацию (например, результат частичного поиска "подсказка" или новая страница для отображения и т. д...) вы можете использовать GET. Если отправляемые данные являются частью запроса на изменение чего-либо (обновление базы данных, удаление записи и т. д..) затем используйте сообщение.

на стороне сервера нет причин использовать необработанный ввод, если вы не хотите захватить весь блок данных post/get за один раз. Вы можете получить конкретные информация, которую вы хотите через массивы _GET/_POST, как обычно. Библиотеки AJAX, такие как MooTools/jQuery, будут обрабатывать сложную часть выполнения фактических вызовов AJAX и кодирования данных формы в соответствующие форматы для вас.

для данных JSON гораздо проще опубликовать его как тип контента" application/json". Если вы используете GET, вам нужно URL-кодировать JSON в параметре, и это довольно грязно. Кроме того, нет ограничения по размеру, когда вы публикуете. Размер GET, если он очень ограничен (не более 4K).

ваш второй вопрос прост, GET имеет ограничение по размеру 1-2 килобайта как на стороне сервера, так и на стороне браузера, поэтому любые большие объемы данных вам придется отправлять через POST.