Maison >développement back-end >tutoriel php >Pourquoi les variables PHP POST sont-elles absentes de $_POST alors qu'elles sont présentes dans php://input ?
Variables PHP POST manquantes malgré leur présence dans php://input
Introduction :
Lors du traitement des soumissions de formulaires en PHP via des requêtes POST, il est possible de rencontrer un comportement étrange où certaines valeurs sont absentes dans le superglobal $_POST même si elles sont présentes dans la requête brute via php://input.
Description du problème :
Le problème survient lors de la soumission de formulaires HTML volumineux avec des champs imbriqués. Malgré l'envoi des données du formulaire au serveur, certaines valeurs peuvent ne pas parvenir à être renseignées dans $_POST. L'inspection de php://input révèle que ces valeurs sont bien incluses dans la requête mais semblent tronquées dans $_POST.
Cause :
Le comportement est attribué à la modification par PHP des champs POST contenant des caractères comme des points, des espaces, des crochets ouverts, etc. Ces caractères étaient auparavant traités par la configuration obsolète de register_globals.
Solution :
Pour résoudre ce problème, vous pouvez utiliser des solutions de contournement telles que les suivantes :
<code class="php">// Get real POST variables function getRealPOST() { $pairs = explode("&", file_get_contents("php://input")); $vars = array(); foreach ($pairs as $pair) { $nv = explode("=", $pair); $name = urldecode($nv[0]); $value = urldecode($nv[1]); $vars[$name] = $value; } return $vars; }</code>
Cette fonction analyse la requête POST brute dans php://input et reconstruit les variables POST avec les noms de champs d'origine, en tenant compte du remplacements de caractères effectués par PHP.
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!