首页 > 后端开发 > php教程 > 为什么 php://input 中存在某些 $_POST 值却丢失了?

为什么 php://input 中存在某些 $_POST 值却丢失了?

DDD
发布: 2024-10-29 07:01:02
原创
533 人浏览过

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板