Heim > Backend-Entwicklung > PHP-Tutorial > Warum fehlen einige $_POST-Werte, wenn sie in php://input vorhanden sind?

Warum fehlen einige $_POST-Werte, wenn sie in php://input vorhanden sind?

DDD
Freigeben: 2024-10-29 07:01:02
Original
503 Leute haben es durchsucht

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

PHP $_POST-Werte fehlen, wenn sie in php://input vorhanden sind

Beim Senden großer HTML-Formulare per POST fehlen möglicherweise einige $_POST-Werte in PHP. Dies geschieht, obwohl die Werte im rohen Anforderungstext vorhanden sind, auf den über php://input zugegriffen werden kann.

Das Problem entsteht, weil PHP bestimmte Zeichen, wie Leerzeichen und Punkte, in Feldnamen ändert, um den veralteten register_globals zu entsprechen Einstellung. Infolgedessen sind möglicherweise einige Schlüssel geändert und fehlen in $_POST.

Um dieses Problem zu beheben, ziehen Sie die folgenden Problemumgehungen in Betracht:

Problemumgehungen

  1. Benutzerdefinierte Funktion: Erstellen Sie eine Funktion, um die php://-Eingabe zu analysieren und das richtige $_POST-Array unter Berücksichtigung der geänderten Feldnamen zu rekonstruieren.
<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>
Nach dem Login kopieren
  1. Register_globals deaktivieren: Setzen Sie register_globals in Ihrer PHP-Konfiguration auf „Aus“, um Feldnamenänderungen zu verhindern. Dies wird jedoch nicht empfohlen, da register_globals ein Sicherheitsrisiko darstellt.
  2. URL-Feldnamen kodieren: Kodieren Sie die Feldnamen in Ihrem HTML-Formular mit urlencode(), um zu verhindern, dass Sonderzeichen geändert werden.

Zum Beispiel HTML-Fragment:

<code class="html"><input type="text" name="my_field.value" value="test"></code>
Nach dem Login kopieren

PHP-Code:

<code class="php">$my_field_value = $_POST['my_field.value'];</code>
Nach dem Login kopieren
  1. Verwenden Sie eine alternative Methode für große Formulare: Erwägen Sie die Verwendung einer alternativen Methode, z. B. multipart/form-data, die sich besser für die Verarbeitung großer Formulare und die Beibehaltung von Feldnamen eignet.

Das obige ist der detaillierte Inhalt vonWarum fehlen einige $_POST-Werte, wenn sie in php://input vorhanden sind?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage