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 ?

Pourquoi les variables PHP POST sont-elles absentes de $_POST alors qu'elles sont présentes dans php://input ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-30 06:44:02389parcourir

Why are PHP POST variables missing from $_POST despite being present in 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("&amp;", 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!

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