【问题标题】:Why would you merge $_GET and $_POST in PHP?为什么要在 PHP 中合并 $_GET 和 $_POST?
【发布时间】:2010-11-27 23:56:40
【问题描述】:

我刚刚在研究 wordpress 源代码 (PHP) 时看到了这段代码,您可以看到它们将所有 get 和 post 值合并/转换为 1 个请求数组。

现在,据我所知,$_GET 和 $_POST 已经可以通过使用 array_merge() 函数调用 $_REQUEST WITHOUT 来获得,那么有什么想法为什么要这样做?

$_REQUEST = array_merge($_GET, $_POST);

【问题讨论】:

    标签: php array-merge


    【解决方案1】:

    这是因为默认的$_REQUEST$_GET$_POST$_COOKIE 的合并。此外,这些超全局变量合并到$_REQUEST 中的顺序取决于ini 设置variables_order,并且从PHP 5.3.0 开始也可能受到request_order 的影响。 所以我的猜测是,如果开发人员无法访问 ini 设置(例如在共享主机上),开发人员希望确保 $_REQUEST 仅包含 $_GET$_POST,并按特定顺序合并.你看,variables_orderrequest_order 不能在每个脚本的基础上进行配置。

    HTH

    【讨论】:

      【解决方案2】:

      $_REQUEST 默认包含$_GET$_POST$_COOKIE 数组的内容。也许他们想从中排除 COOKIE 变量,因为它通常不用于此目的。

      【讨论】:

      • 是的,也许出于安全原因,他们希望从 $_REQUEST 中删除 COOKIES,以便能够同时使用 GET 和 POST。 +1 为思想一致的伟大思想家。
      • 是的,这是一种常见的 XSS 攻击向量,因为恶意 JavaScript 可以在用户不注意的情况下设置 cookie 变量,而 PHP 的默认 GPC 顺序意味着这些 cookie 值将覆盖用户在表单中键入的任何内容。
      【解决方案3】:

      如果您有一个同名的 GET 变量和一个 POST 变量,它将选择 POST 变量而不是 GET 变量。

      此外,您可能不希望 $_REQUEST 变量中的 cookie。

      【讨论】:

      【解决方案4】:

      我不知道具体为什么在您看到它的地方完成它,但我之前已经看到,当对一个或另一个数组中的值进行了一些处理并且您想将这些更改合并回 $_REQUEST这样任何使用 $_REQUEST 的人都会得到更改,即使它们已对 $_POST 或 $_GET 变量进行了更改。

      这出现在像 Wordpress 这样的情况下,因为插件开发人员可能会使用这些变量中的任何一个来访问数据,而 Wordpress 核心需要确保它们都获得相同的数据。

      您为什么不想直接对 $_REQUEST 执行此操作?因为 $_REQUEST 包含大量 $_POST 和 $_GET 没有的额外信息。您可能不想将处理应用到所有这些额外的位。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-07-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多