Comparez les différences entre les méthodes de soumission du formulaire POST et fsockopen.
Lorsque le formulaire est soumis en mode POST,
$_POST et php://input peuvent obtenir la valeur et $HTTP_RAW_POST_DATA est vide.
$_POST organise les données soumises dans un tableau associatif et effectue un traitement d'encodage, tel que le décodage d'url, et même une conversion d'encodage.
php://input peut obtenir des données brutes POST non traitées en lisant des fichiers via le flux d'entrée.
php://input permet de lire les données brutes de POST. Il exerce moins de pression sur la mémoire que $HTTP_RAW_POST_DATA et ne nécessite aucun paramètre php.ini spécial. php://input ne peut pas être utilisé avec enctype="multipart/form-data".
Exemple de fsockopen soumettant des données POST :
$sock = fsockopen("localhost", 80, $errno, $errstr, 30);
if (!$sock) die("$errstr ($errno)n");
$data = "txt=" . urlencode("中") . "&bar=" urlencode("Valeur de la barre");
fwrite($sock, "POST /posttest/response.php HTTP/1.0rn");
fwrite($sock, "Hôte : localhostrn");
fwrite($sock, "Type de contenu : application/x-www-form-urlencodedrn");
fwrite($sock, "Content-length: " . strlen($data) . "rn");
fwrite($sock, "Accepter : */*rn");
fwrite($chaussette, "rn");
fwrite($sock, "$datarn");
fwrite($chaussette, "rn");
$en-têtes = "";
tandis que ($str = trim(fgets($sock, 4096)))
$headers .= "$strn";
écho "n" ;
$corps = "";
tandis que (!feof($chaussette))
$body .= fgets($chaussette, 4096);
fclose($chaussette);
echo $body;
est cohérente avec le résultat de (1)
:
1. Utilisez php://input pour obtenir facilement les données POST originales.
2. $HTTP_RAW_POST_DATA n'est valide que lorsque le type Content-Type de POST n'est pas reconnu par PHP.
Par exemple, les données POST généralement soumises via les formulaires de page ne peuvent pas être transmises. via $ HTTP_RAW_POST_DATA est extrait. Son attribut de type d'encodage (attribut enctype) est application/x-www-form-urlencoded, multipart/form-data.
Remarque : Même si vous modifiez explicitement l'attribut enctype dans la page en un type qui n'est pas reconnu par PHP, il sera toujours invalide.
Étant donné que l'attribut d'encodage de soumission du formulaire est limité au formulaire, les types méconnaissables seront considérés comme étant soumis dans l'encodage par défaut (c'est-à-dire application/x-www-form-urlencoded)
3. $_POST uniquement lorsque les données sont dans application/x-www -form-urlencoded Le type ne peut être obtenu que lors de la soumission.