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.