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!