Un article pour comprendre la différence entre $ _POST et file_get_contents ("php: // input")

Aujourd'hui, parlons de la différence entre $ _POST, file_get_contents ("php: // input") et $ GLOBALS ['HTTP_RAW_POST_DATA']. Ces trois méthodes sont utilisées pour recevoir des demandes de publication, mais peu de gens disent que leur Quelle est la différence? Parlons-en

1. $ _POST ['paramName']

Ne peut recevoir que les données soumises par Content-Type: application / x-www-form-urlencoded, php remplira les données correspondantes du corps de la requête http dans le tableau $ _POST, et les données remplies dans le tableau $ _POST sont urldecode () Le résultat de l'analyse. (En fait, en plus du type de contenu, il existe également des données en plusieurs parties / formulaires indiquant que les données sont des données de formulaire)

二 、 file_get_contents ("php: // input")

Adapté à la plupart des types de contenu, l'entrée php: // permet de lire les données brutes de POST. Comparé à $ HTTP_RAW_POST_DATA, il met moins de pression sur la mémoire et ne nécessite aucun paramètre php.ini spécial. php: // input ne peut pas être utilisé pour enctype = "multipart / form-data".

三 、 $ GLOBALS ['HTTP_RAW_POST_DATA'];

La variable $ HTTP_RAW_POST_DATA contient toujours les données brutes POST. Cette variable est générée uniquement lorsque vous rencontrez des données qui ne reconnaissent pas le type MIME. $ HTTP_RAW_POST_DATA n'est pas disponible pour les données de formulaire enctype = "multipart / form-data".

Portez une attention particulière à cette méthode lorsque la version php est faible et que la configuration php.ini est activée, always_populate_raw_post_data est activé et peut être utilisé, et il est abandonné après php7.

Pour résumer,
1. Coentent-Type remplit uniquement les données globales $ _POST avec les données correspondantes dans le paquet de requête http lorsque les valeurs sont application / x-www-data-urlencoded et multipart / form-data.

2. Lorsque le type Content-Type n'est pas reconnu par PHP, les données correspondantes dans le package de requête HTTP seront remplies dans la variable $ HTTP_RAW_POST_DATA

3. Ce n'est que lorsque Coentent-Type n'est pas multipart / form-data, PHP ne remplira pas les données correspondantes dans le paquet de requête http dans l'entrée php: //, sinon d'autres situations le feront. La longueur du remplissage est spécifiée par Coentent-Length.

4. Uniquement lorsque le Content-Type est application / x-www-data-urlencoded, les données d'entrée php: // sont cohérentes avec les données $ _POST.

5. Les données d'entrée php: // sont toujours les mêmes que $ HTTP_RAW_POST_DATA, mais l'entrée php: // est plus efficace que $ HTTP_RAW_POST_DATA, et aucun paramètre spécial n'est requis pour php.ini

6. PHP remplira la partie query_path du champ PATH dans la variable globale $ _GET. Habituellement, le corps de la demande HTTP soumise par la méthode GET est vide.

En bref:

1. S'il s'agit du format application / x-www-form-urlencoded et multipart / form-data, utilisez $ _POST;

2. Si text / xml, application / json, soap ne sont pas disponibles, utilisez file_get_contents ('php: // input');

Après avoir lu ceci, vous devriez comprendre pourquoi nous utilisons davantage file_get_contents ("php: // input") lorsque nous nous connectons à des plateformes tierces.

Je suppose que tu aimes

Origine www.cnblogs.com/qqshuazuan/p/12739290.html
conseillé
Classement