首頁 >後端開發 >php教程 >為什麼 php://input 中存在某些 $_POST 值卻遺失了?

為什麼 php://input 中存在某些 $_POST 值卻遺失了?

DDD
DDD原創
2024-10-29 07:01:02511瀏覽

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

PHP $_POST 值在 php://input 中缺失

透過 POST 提交大型 HTML 表單時,PHP 可能會缺少某些 $_POST 值。儘管透過 php://input 存取的原始請求正文中存在值,但仍會發生這種情況。

出現此問題的原因是 PHP 修改了欄位名稱中的某些字符,例如空格和點,以符合已棄用的 register_globals環境。因此,某些鍵可能會被更改並在 $_POST 中缺失。

要解決此問題,請考慮以下解決方法:

解決方法

  1. 自訂函數: 建立一個函數來解析php ://input 並且重建正確的$_POST 數組,考慮修改後的欄位名稱。
<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>
  1. 停用 register_globals: 在 PHP 配置中將 register_globals 設為「Off」以防止欄位名稱修改。但是,不建議這樣做,因為 register_globals 存在安全風險。
  2. URL 編碼欄位名稱: 使用 urlencode() 對 HTML 表單中的欄位名稱進行編碼,以防止特殊字元被修改。

例如,HTML 片段:

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

PHP 程式碼:

<code class="php">$my_field_value = $_POST['my_field.value'];</code>
  1. 使用大表單的替代方法: 使用大表的替代方法: > 考慮使用替代方法,例如multipart/form-data,它更適合處理大型表單並保留欄位名稱。

以上是為什麼 php://input 中存在某些 $_POST 值卻遺失了?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn