Maison > développement back-end > tutoriel php > Pourquoi certaines valeurs $_POST sont-elles manquantes lorsqu'elles sont présentes dans php://input ?

Pourquoi certaines valeurs $_POST sont-elles manquantes lorsqu'elles sont présentes dans php://input ?

DDD
Libérer: 2024-10-29 07:01:02
original
577 Les gens l'ont consulté

Why Are Some $_POST Values Missing When Present in php://input?

Valeurs PHP $_POST manquantes lorsqu'elles sont présentes dans php://input

Lors de la soumission de formulaires HTML volumineux via POST, certaines valeurs $_POST peuvent être manquantes dans PHP. Cela se produit malgré la présence de valeurs dans le corps brut de la requête accessible via php://input.

Le problème survient car PHP modifie certains caractères, tels que les espaces et les points, dans les noms de champs pour se conformer aux registres obsolètes register_globals. paramètre. Par conséquent, certaines clés peuvent être altérées et absentes de $_POST.

Pour résoudre ce problème, envisagez les solutions de contournement suivantes :

Solutions de contournement

  1. Fonction personnalisée : Créez une fonction pour analyser l'entrée php://et reconstruire le tableau $_POST correct, en tenant compte des noms de champs modifiés.
<code class="php">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>
Copier après la connexion
  1. Désactivez register_globals : Définissez register_globals sur "Off" dans votre configuration PHP pour empêcher les modifications du nom du champ. Cependant, cela n'est pas recommandé car register_globals présente un risque de sécurité.
  2. URL Encode les noms de champs : Encodez les noms de champs dans votre formulaire HTML à l'aide de urlencode() pour empêcher la modification des caractères spéciaux.

Par exemple, fragment HTML :

<code class="html"><input type="text" name="my_field.value" value="test"></code>
Copier après la connexion

Code PHP :

<code class="php">$my_field_value = $_POST['my_field.value'];</code>
Copier après la connexion
  1. Utilisez une méthode alternative pour les formulaires volumineux : Envisagez d'utiliser une méthode alternative, telle que multipart/form-data, qui est mieux adaptée à la gestion de formulaires volumineux et à la préservation des noms de champs.

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 de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal