файл 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 ответов:
на самом деле
php://input
позволяет читать необработанные данные POST.это менее интенсивная альтернатива памяти $HTTP_RAW_POST_DATA и не требует специального php.ini директивы.
php://input
не работает сenctype="multipart/form-data"
.
php: / / input is a только для чтения поток, который позволяет считывать необработанные данные из тела запроса. В случае POST-запросов предпочтительней чтобы использовать php: / / input вместо $HTTP_RAW_POST_DATA как это не зависит от специального php.ini директивы. Более того, для этих случаев где $HTTP_RAW_POST_DATA не заполняется по умолчанию, это a потенциально менее интенсивная альтернатива активации памяти always_populate_raw_post_data.
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 и кодирования данных формы в соответствующие форматы для вас.