PHP POST Variables Missing Despite Presence in php://input
Introduction:
When processing form submissions in PHP via POST requests, it's possible to encounter a strange behavior where certain values are absent in the $_POST superglobal even though they are present in the raw request via php://input.
Problem Description:
The issue arises when submitting large HTML forms with nested fields. Despite the form data being sent to the server, some values may fail to populate in $_POST. Inspection of php://input reveals that these values are indeed included in the request but appear to be truncated in $_POST.
Cause:
The behavior is attributed to PHP's modification of POST fields containing characters like dots, spaces, open square brackets, etc. These characters were previously processed by the deprecated register_globals configuration.
Solution:
To address this issue, you can employ workarounds such as the following:
<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>
This function parses the raw POST request in php://input and reconstructs the POST variables with the original field names, accounting for the character replacements made by PHP.
The above is the detailed content of Why are PHP POST variables missing from $_POST despite being present in php://input?. For more information, please follow other related articles on the PHP Chinese website!