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.
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
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.
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'));
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.
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).
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.