file_get_contents («php: // input») или $ HTTP_RAW_POST_DATA, какой из них лучше получить тело запроса JSON?
И какой тип запроса ( GET
или POST
) следует использовать для отправки данных JSON при использовании клиентской стороны XmlHTTPRequest
?
Мой вопрос был вдохновлен этим ответом: как разместить JSON на PHP с завитом
Он говорит:
С точки зрения протокола
file_get_contents("php://input")
на самом деле более корректно, так как вы все равно не обрабатываете данные мультиплексора http.
Фактически, php://input
позволяет вам считывать необработанные данные POST.
Это менее энергоемкая альтернатива $ HTTP_RAW_POST_DATA и не нуждается в каких-либо специальных директивах php.ini .
php://input
не доступен с enctype="multipart/form-data"
.
php: // input – это поток только для чтения, который позволяет вам считывать необработанные данные из тела запроса. В случае запросов POST предпочтительнее использовать вход php: // вместо $ HTTP_RAW_POST_DATA, поскольку он не зависит от специальных директив php.ini . Более того, для тех случаев, когда по умолчанию HTTP_RAW_POST_DATA не заполняется по умолчанию, это потенциально менее энергоемкая альтернатива активации 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 / _POST, как обычно. Библиотеки AJAX, такие как MooTools / jQuery, будут обрабатывать сложную часть выполнения фактических вызовов AJAX и данных формы кодирования в соответствующие форматы для вас.
Для данных JSON намного проще ПОСТ-ТАК как «тип приложения / json». Если вы используете GET, вам нужно URL-кодировать JSON в параметре, и это довольно грязно. Кроме того, при POST не существует ограничения по размеру. Размер GET, если он ограничен (максимум 4K).
Ваш второй вопрос прост, GET имеет ограничение по размеру в 1-2 килобайта как на стороне сервера, так и на стороне браузера, поэтому любые большие объемы данных, которые вы должны были бы отправлять через POST.