fichier get contents ("php: / / input") ou $HTTP RAW POST DATA, lequel est le meilleur pour obtenir le corps de la requête JSON?

file_get_contents("php://input") or $HTTP_RAW_POST_DATA - lequel est le meilleur pour obtenir le corps de la requête JSON?

et quel type de demande ( GET ou POST ) dois-je utiliser pour envoyer des données JSON lorsque j'utilise le côté client XmlHTTPRequest ?

ma question a été inspirée de cette réponse: Comment poster JSON en PHP avec curl

citation de cette réponse:

D'un protocole la perspective file_get_contents("php://input") est en fait plus correcte, puisque vous n'êtes pas vraiment en train de traiter des données de forme multipart http de toute façon.

98
demandé sur Boolean_Type 2010-04-28 20:20:28

6 réponses

en fait php://input vous permet de lire des données brutes POST.

c'est une alternative moins intensive en mémoire à $HTTP_RAW_POST_DATA et n'a pas besoin de php spécial.directives ini .

php://input n'est pas disponible avec enctype="multipart/form-data" .

référence: http://php.net/manual/en/wrappers.php.php

171
répondu zaf 2013-05-24 06:12:20

php://input est un lecture seule flux " qui vous permet de lire des données brutes à partir du corps de la requête. Dans le cas de demandes postales, il est préférable pour utiliser php: / / input au lieu de $HTTP_RAW_POST_DATA comme il ne dépendent spécial php.directives ini . En outre, pour les cas lorsque $HTTP_RAW_POST_DATA n'est pas rempli par défaut, c'est un une alternative moins gourmande en mémoire à l'activation always_populate_raw_post_data.

Source: http://php.net/manual/en/wrappers.php.php .

11
répondu Zeeshan Hyder 2014-08-31 04:00:30

file_get_contents(php://input) - récupère les données brutes du POST et vous devez l'utiliser lorsque vous écrivez des API et avez besoin de XML/JSON/... d'entrée qui ne peut pas être décodé $_POST par PHP exemple:

envoyer par la poste chaîne 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'));
8
répondu zloctb 2015-10-20 00:53:46

les règles habituelles doivent s'appliquer pour l'envoi de la demande. Si la requête est de récupérer des informations (par exemple un résultat de recherche partielle "indice", ou une nouvelle page à afficher, etc...) vous pouvez utiliser pour OBTENIR. Si les données envoyées font partie d'une demande de modification (mise à jour d'une base de données, suppression d'un enregistrement, etc.).) puis Utiliser POST.

côté serveur, il n'y a aucune raison d'utiliser l'entrée brute, à moins que vous ne vouliez saisir l'ensemble du bloc de données post/get en une seule fois. Vous pouvez récupérez les informations spécifiques que vous voulez via les tableaux _GET/_POST comme d'habitude. Les bibliothèques AJAX telles que MooTools / jQuery géreront la partie difficile de faire les appels AJAX réels et encoder les données de forme dans les formats appropriés pour vous.

3
répondu Marc B 2010-04-28 16:26:47

pour les données JSON, il est beaucoup plus facile de les afficher en tant que type de contenu "application/json". Si vous utilisez GET, vous devez encoder le JSON dans un paramètre et c'est un peu compliqué. En outre, il n'y a pas de limite de taille lorsque vous postez. Taille de GET si très limité (4K au maximum).

2
répondu ZZ Coder 2010-04-28 16:33:18

votre deuxième question est facile, GET a une limitation de taille de 1-2 kilo-octets à la fois du côté du serveur et du côté du navigateur, de sorte que toute sorte de plus grandes quantités de données que vous auriez à envoyer par la poste.

2
répondu Pekka 웃 2015-05-27 22:26:02