Hoy, hablemos de la diferencia entre $ _POST, file_get_contents ("php: // input") y $ GLOBALS ['HTTP_RAW_POST_DATA']. Estos tres métodos se utilizan para recibir solicitudes de publicación, pero pocas personas dicen que ¿Cuál es la diferencia? Hablemos de eso
1. $ _POST ['paramName']
Solo se pueden recibir datos enviados por Content-Type: application / x-www-form-urlencoded. PHP completará los datos correspondientes del cuerpo de solicitud http en la matriz $ _POST. El resultado del análisis. (En realidad, además del Tipo de contenido, también hay datos multiparte / formulario que indican que los datos son datos de formulario)
二 、 file_get_contents ("php: // input")
Adecuado para la mayoría de los tipos de Content-type, php: // input permite leer los datos sin procesar de POST. En comparación con $ HTTP_RAW_POST_DATA, ejerce menos presión sobre la memoria y no requiere ninguna configuración especial de php.ini. php: // input no se puede usar para enctype = "multipart / form-data".
三 、 $ GLOBALS ['HTTP_RAW_POST_DATA'];
La variable $ HTTP_RAW_POST_DATA siempre contiene los datos POST sin procesar. Esta variable solo se genera cuando se encuentran datos que no reconocen el tipo MIME. $ HTTP_RAW_POST_DATA no está disponible para datos de formulario enctype = "multipart / form-data".
Preste especial atención a este método cuando la versión de php sea baja y la configuración de php.ini esté habilitada, el valor always_populate_raw_post_data está activado, se puede usar php7 después.
Para resumir,
1. Coentent-Type solo llena los datos globales $ _POST con los datos correspondientes en el paquete de solicitud http cuando los valores son application / x-www-data-urlencoded y multipart / form-data.
2. Cuando PHP no reconoce el tipo de tipo de contenido, los datos correspondientes en el paquete de solicitud HTTP se completarán en la variable $ HTTP_RAW_POST_DATA
3. Solo cuando Coentent-Type no es multipart / form-data, PHP no completará los datos correspondientes en el paquete de solicitud http en php: // input, de lo contrario, otras situaciones lo harán. La longitud del relleno se especifica por Coentent-Length.
4. Solo cuando Content-Type es application / x-www-data-urlencoded, los datos de entrada php: // son consistentes con los datos $ _POST.
5. php: // los datos de entrada son siempre los mismos que $ HTTP_RAW_POST_DATA, pero php: // input es más efectivo que $ HTTP_RAW_POST_DATA, y no se requieren configuraciones especiales para php.ini
6. PHP llenará la parte query_path del campo PATH en la variable global $ _GET. Por lo general, el cuerpo de la solicitud HTTP enviada por el método GET está vacío.
En resumen:
1. Si es el formato application / x-www-form-urlencoded y multipart / form-data, use $ _POST;
2. Si text / xml, application / json, soap no están disponibles, use file_get_contents ('php: // input');
Después de leer esto, debe entender por qué usamos file_get_contents ("php: // input") más cuando interactuamos con plataformas de terceros.