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
534 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!

source:php.cn
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