Un artículo para comprender la diferencia entre $ _POST y file_get_contents ("php: // input")

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.

Supongo que te gusta

Origin www.cnblogs.com/qqshuazuan/p/12739290.html
Recomendado
Clasificación