Heim > Artikel > Backend-Entwicklung > Warum fehlen PHP-POST-Variablen in $_POST, obwohl sie in php://input vorhanden sind?
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("&", 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!