Maison >développement back-end >Problème PHP >Quelle est la différence entre php://input et $_post ?
Quelle est la différence entre php://input et $_post ? L’article suivant vous le présentera. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. J'espère qu'il sera utile à tout le monde.

Quelques phrases extraites du manuel :
Quand requête HTTP POST Quand contenu -Type est application/x-www-form-urlencoded ou multipart/form-data, les variables seront passées dans le script actuel sous la forme d'un tableau associatif.
php://input est un flux en lecture seule qui donne accès aux données brutes demandées. Lorsque enctype="multipart/form-data" est utilisé, php://input n'est pas valide.
Vérifiez :
post.html
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<form action="getpost.php" method="post">
<input type="text" name="name" value="saisai">
<input type="submit" name="submit" value="submit">
</form>
</body>
</html>getpost.php
<?php
echo "----------input--------<br />";
var_dump(file_get_contents('php://input', 'r'));
echo "----------post---------<br />";
var_dump($_POST);
?>1. "application/x-www-form-urlencoded"
Corps de la requête :
Content-Type: application/x-www-form-urlencoded Content-Length: 25name=saisai&submit=submit
Sortie :
----------input-------- string 'name=saisai&submit=submit' (length=25) ----------post--------- array (size=2) 'name' => string 'saisai' (length=6) 'submit' => string 'submit' (length=6)
Résumé : Lorsque enctype="application/x- www -form-urlencoded", les données (name=saisai&submit=submit) dans le corps de la requête sont converties en un tableau associatif et placées dans $_POST, tandis que php://input obtient les données originales (données brutes).
2. Lorsque enctype="multipart/form-data"
2.1 Formulaire :
<form action="getpost.php" method="post" enctype="multipart/form-data">
<input type="text" name="name" value="saisai">
<input type="submit" name="submit" value="submit">
</form>Sujet de la demande :
Content-Type: multipart/form-data; boundary=---------------------------22554656810024 Content-Length: 249 -----------------------------22554656810024 Content-Disposition: form-data; name="name" saisai -----------------------------22554656810024 Content-Disposition: form-data; name="submit" submit -----------------------------22554656810024--
Sortie :
----------input-------- string '' (length=0) ----------post--------- array (size=2) 'name' => string 'saisai' (length=6) 'submit' => string 'submit' (length=6)
Résumé : Lorsque enctype="multipart/form-data" et qu'il n'y a pas de contrôle de fichier de téléchargement, $_POST peut imprimer les données normalement, mais php:// n'est pas valide.
Formulaire 2.2 (ajouter un téléchargement de fichier) :
<form action="getpost.php" method="post" enctype="multipart/form-data">
<input type="text" name="name" value="saisai">
<input type="submit" name="submit" value="submit">
</form>Sujet de la demande :
Content-Type: multipart/form-data; boundary=---------------------------272321281228527
Content-Length: 68386
-----------------------------272321281228527
Content-Disposition: form-data; name="name"
saisai
-----------------------------272321281228527
Content-Disposition: form-data; name="filename"; filename="dog.png"
Content-Type: image/png
一堆乱码
-----------------------------272321281228527
Content-Disposition: form-data; name="submit"
submit
-----------------------------272321281228527--Sortie :
----------input-------- string '' (length=0) ----------post--------- array (size=2) 'name' => string 'saisai' (length=6) 'submit' => string 'submit' (length=6)
Résumé : In enctype="multipart/form -data" et il existe un contrôle de fichier de téléchargement, $_POST peut imprimer les données entrantes, mais exclut tout contenu téléchargé. php:// n'est pas valide.
3. enctype="text/plain"
Formulaire :
<form action="getpost.php" method="post" enctype="text/plain">
<input type="text" name="name" value="saisai">
<input type="submit" name="submit" value="submit">
</form>Corps de la requête :
Content-Type: text/plain Content-Length: 28 name=saisai submit=submit
Sortie :
----------input-------- string 'name=saisai submit=submit ' (length=28) ----------post--------- array (size=0) empty
Résumé : lorsque enctype="text/plain", il n'y a pas de contenu dans $_POST, et il est stocké dans des paires clé-valeur dans php://input.
Résumé :
Lorsque le Content-Type de la requête HTTP POST est application/x-www-form-urlencoded ou multipart/form -data : php://input contient les données originales similaires à a=1&b=2. $_POST contient un tableau associatif et ne télécharge pas le contenu du contrôle.
php://input est un flux en lecture seule qui donne accès aux données brutes demandées. Lorsque enctype="multipart/form-data" est utilisé, php://input n'est pas valide.
$_POST ne peut pas obtenir les données de publication lorsque Content-Type = "text/plain", mais php://input le peut.
Pour plus de connaissances connexes, veuillez faire attention au Site Web PHP chinois ! !
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!