ejemplo - file_get_contents("php:// input") o $ HTTP_RAW_POST_DATA, ¿cuál es mejor para obtener el cuerpo de la solicitud JSON?
string to json php (6)
La entrada php: // es una secuencia de solo lectura que le permite leer datos brutos del cuerpo de la solicitud. En el caso de solicitudes POST, es preferible utilizar la entrada php: // en lugar de $ HTTP_RAW_POST_DATA, ya que no depende de directivas php.ini especiales . Además, para aquellos casos en los que $ HTTP_RAW_POST_DATA no se rellena de manera predeterminada, es una alternativa potencialmente menos intensiva en memoria a la activación de always_populate_raw_post_data.
file_get_contents("php://input")
o $HTTP_RAW_POST_DATA
- ¿cuál es mejor para obtener el cuerpo de la solicitud JSON?
¿Y qué tipo de solicitud ( GET
o POST
) debo usar para enviar datos JSON cuando uso el lado del cliente XmlHTTPRequest
?
Mi pregunta se inspiró en esta respuesta: Cómo publicar JSON en PHP con curl
Cita de esa respuesta:
Desde un punto de vista de protocolo
file_get_contents("php://input")
es en realidad más correcto, ya que en realidad no está procesando datos de formularios http multipart de todos modos.
En realidad, la php://input
permite leer datos POST sin formato.
Es una alternativa menos intensiva en memoria a $ HTTP_RAW_POST_DATA y no necesita ninguna directiva php.ini especial .
php://input
no está disponible con enctype="multipart/form-data"
.
Referencia: http://php.net/manual/en/wrappers.php.php
Las reglas habituales deben aplicarse a la forma en que envía la solicitud. Si la solicitud es para recuperar información (por ejemplo, un resultado de búsqueda indirecta parcial, o una nueva página para mostrar, etc.), puede usar GET. Si los datos que se envían son parte de una solicitud para cambiar algo (actualizar una base de datos, eliminar un registro, etc.) luego usar POST.
En el lado del servidor, no hay ninguna razón para usar la entrada en bruto, a menos que desee tomar todo el bloque de entrada / obtención de datos de una sola vez. Puede recuperar la información específica que desee a través de las matrices _GET / _POST como de costumbre. Las bibliotecas de AJAX como MooTools / jQuery manejarán la parte difícil de hacer las llamadas AJAX reales y la codificación de los datos del formulario en los formatos adecuados para usted.
Para los datos JSON, es mucho más fácil POST como tipo de contenido "application / json". Si usa GET, tiene que codificar en URL el JSON en un parámetro y es un poco desordenado. Además, no hay límite de tamaño cuando realiza POST. El tamaño de GET es muy limitado (4K como máximo).
Su segunda pregunta es fácil, GET tiene una limitación de tamaño de 1 a 2 kilobytes tanto en el lado del servidor como en el del navegador, por lo que cualquier tipo de cantidades de datos mayores deberá enviarse a través de POST.
file_get_contents (php: // input) - obtiene los datos de POST sin procesar y necesita usar esto cuando escribe API y necesita la entrada XML / JSON / ... que no puede ser decodificada a $ _POST por PHP, por ejemplo:
enviar por correo cadena 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>
1.php
//print_r($_POST); //empty!!! don''t work ...
var_dump( file_get_contents(''php://input''));