Maison >développement back-end >tutoriel php >Explication détaillée de l'exemple de code pour les flux d'entrée et de sortie PHP (image)

Explication détaillée de l'exemple de code pour les flux d'entrée et de sortie PHP (image)

黄舟
黄舟original
2017-03-29 10:00:421933parcourir

Cet article présente principalement les flux d'entrée et de sortie de php. Des informations connexes et des exemples de codes simples sont compilés ici. Les amis dans le besoin peuvent se référer à

Étudiant récemment http<.>Accord ! Afin de mieux comprendre le protocole http, j'ai jeté un oeil au module http de nodejs ! J'ai l'impression d'avoir gagné beaucoup. Par exemple, j'utilise une requête http pour envoyer une requête :

var options = {
 host: &#39;localhost&#39;,
 port: 80,
 path: &#39;/backbone/data.php&#39;,
 method: &#39;POST&#39;
};


var req = http.request(options, function(res) {
 console.log(&#39;STATUS: &#39; + res.statusCode);
 console.log(&#39;HEADERS: &#39; + JSON.stringify(res.headers));
 res.setEncoding(&#39;utf8&#39;);
 res.on(&#39;data&#39;, function (chunk) {
  console.log(&#39;BODY: &#39; + chunk);
 });
});
// write data to request body
req.end(&#39;name=liuzhang&age=28&#39;);
Le code ci-dessus signifie envoyer des données 'name=liuzhang&age=28', le rappel est la réponse

objet , et le serveur répond Les données sont imprimées !

le code data.php est

print_r($_POST);
imprimer les données transmises ! Le résultat de l'exécution de


sur la ligne de commande est

Vous pouvez voir que

Array est vide, c'est-à-dire. , $_POST n'a pas de données. Au début, je pensais que les données n'étaient pas transmises ! Mais j'ai changé le backend data.php en

echo file_get_contents("php://input");


et j'ai reçu les données transmises !

php://input est un flux en lecture seule qui donne accès aux données brutes demandées. Dans le cas des requêtes POST, il est préférable d'utiliser php://input au lieu de $HTTP_RAW_POST_DATA, car il ne repose pas sur des directives php.ini spécifiques. De plus, dans ce cas, $HTTP_RAW_POST_DATA n'est pas renseigné par défaut, ce qui nécessite potentiellement moins de mémoire que l'activation de always_populate_raw_post_data. Lorsque enctype="multipart/form-data" est utilisé, php://input n'est pas valide.

$_POST ne peut être obtenu que lorsque les données sont soumises selon le type application/x-www-form-urlencoded. L'attribut enctype

du formulaire est la méthode d'encodage. ceux couramment utilisés : application/x-www-form-urlencoded et multipart/form-data, la valeur par défaut est application/x-www-form-urlencoded. Lorsque action est obtenue, le navigateur utilise le codage x-www-form-urlencoded pour convertir les données du formulaire en une chaîne (name1=value1&name2=value2...), puis ajoute cette chaîne à Après l'url. , divisez-le avec ? pour charger cette nouvelle URL. Lorsque l'action est publiée, le navigateur encapsule les données du formulaire dans le corps http, puis les envoie au serveur.

Lorsque nous modifions les options d'envoi en

var options = {
 host: &#39;localhost&#39;,
 port: 80,
 path: &#39;/backbone/data.php&#39;,
 method: &#39;POST&#39;,
 headers : {&#39;Content-Type&#39;: &#39;application/x-www-form-urlencoded&#39;}
};
et ajoutons un type de contenu d'en-tête, nous pouvons utiliser $_POST pour recevoir les données ! S'il ne s'agit pas de ce type de formulaire, vous pouvez utiliser la saisie brute pour recevoir des données !

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn