Heim  >  Artikel  >  Backend-Entwicklung  >  Warum fehlen PHP-POST-Variablen in $_POST, obwohl sie in php://input vorhanden sind?

Warum fehlen PHP-POST-Variablen in $_POST, obwohl sie in php://input vorhanden sind?

Linda Hamilton
Linda HamiltonOriginal
2024-10-30 06:44:02305Durchsuche

Why are PHP POST variables missing from $_POST despite being present in php://input?

PHP-POST-Variablen fehlen trotz Vorhandensein in php://input

Einführung:

Bei der Verarbeitung von Formularübermittlungen in PHP über POST-Anfragen kann es zu einem seltsamen Verhalten kommen, bei dem bestimmte Werte im Superglobal $_POST fehlen, obwohl sie in der Rohanforderung über php://input vorhanden sind.

Problembeschreibung:

Das Problem tritt beim Senden großer HTML-Formulare mit verschachtelten Feldern auf. Obwohl die Formulardaten an den Server gesendet werden, können einige Werte möglicherweise nicht in $_POST eingefügt werden. Eine Überprüfung der php://-Eingabe zeigt, dass diese Werte tatsächlich in der Anfrage enthalten sind, aber in $_POST abgeschnitten zu sein scheinen.

Ursache:

Das Verhalten wird zugeschrieben auf PHPs Änderung von POST-Feldern, die Zeichen wie Punkte, Leerzeichen, offene eckige Klammern usw. enthalten. Diese Zeichen wurden zuvor von der veralteten Konfiguration „register_globals“ verarbeitet.

Lösung:

Um dieses Problem zu beheben, können Sie Problemumgehungen wie die folgenden anwenden:

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

Diese Funktion analysiert die rohe POST-Anfrage in php://input und rekonstruiert die POST-Variablen mit den ursprünglichen Feldnamen unter Berücksichtigung der Zeichenersetzungen durch PHP.

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

Stellungnahme:
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