【问题标题】:Can anyone explain the following PHP Code?任何人都可以解释以下 PHP 代码吗?
【发布时间】:2009-07-08 16:40:34
【问题描述】:

谁能解释下面的 PHP 代码?

function get_param($param_name, $param_type = 0)
    {
      global $HTTP_POST_VARS, $HTTP_GET_VARS;

      $param_value = "";
        if (isset($_POST)) {
          if (isset($_POST[$param_name]) && $param_type != GET)
          $param_value = $_POST[$param_name];
          elseif (isset($_GET[$param_name]) && $param_type != POST)
          $param_value = $_GET[$param_name];
        } else {
          if (isset($HTTP_POST_VARS[$param_name]) && $param_type != GET)
          $param_value = $HTTP_POST_VARS[$param_name];
          elseif (isset($HTTP_GET_VARS[$param_name]) && $param_type != POST)
          $param_value = $HTTP_GET_VARS[$param_name];
        }

        return strip($param_value);
    }

function strip($value)
    {
        if (get_magic_quotes_gpc() == 0) {
            return $value;
        } else {
            return stripslashes($value);
        }
    }

更新

它是这样使用的:

$xml = get_param('xml');

【问题讨论】:

  • 您具体有什么问题?
  • 我想知道上面的函数是做什么的?

标签: php


【解决方案1】:

代码从 get 和 post 数据数组中获取值。它还会在启用了魔术引号的 php 安装上去除斜线。看起来该函数是为了向后兼容旧版本的 PHP。除非您需要支持旧版本的 PHP,否则我不会使用它。

在 PHP 5 中您无需进行任何更改,但我只需执行以下操作: 获取数据:

if(isset($_GET['param_name'])){
    // What ever you want to do with the value
}

对于发布数据:

if(isset($_POST['param_name'])){
    // What ever you want to do with the value
}

您还应该阅读Magic Quotes,因为它直到 PHP 5.3.0 才被弃用,您可能需要关注它。

更新后的函数也可以写成:

function get_param($param_name, $param_type = 0)
{

  $param_value = "";
  if (isset($_POST[$param_name]) && $param_type != GET){
      $param_value = $_POST[$param_name];
  }
  elseif (isset($_GET[$param_name]) && $param_type != POST){
      $param_value = $_GET[$param_name];
  }
  return strip($param_value);
}

Strip 可以单独放置。

【讨论】:

  • 如果我想为 PHP 5.1+ 更改它,我必须进行哪些更改?
  • 您不需要为 PHP 5.1+ 更改任何内容。
  • 对不起,我想知道如何从 5.1 及以下版本中删除向后兼容性
  • 添加了一个更新的函数,对 $HTTP_*_VARS 的引用被删除了。
  • 是否可以将上面的代码改为使用 $_REQUEST,而不是同时使用 $_POST 和 $_GET,因为 $_REQUEST 会收集从 $_GET 和 $_POST 发送的数据?
【解决方案2】:
function get_param($param_name, $param_type = 0)

这将返回一个参数值,具有给定的类型,POST 或 GET,这是可选的。该值已去除斜线。

function strip($value)

这将返回不带斜线的参数。

我同意其他 cmets 的观点,即此代码是在 2003 年之前编写的,不应使用,除非用于支持旧代码。

【讨论】:

  • 您可能想补充一点,给定的类型是可选的。
【解决方案3】:

看起来有些疯狂的方法可以确保您获得正确的 GET/POST 变量。 get_param() 中的大部分代码似乎是一种使代码几乎可以在任何 php 版本上运行的方法,因为它使用的是遗留方法,你应该看看PHP Manual about _GET/_POST

【讨论】:

    【解决方案4】:

    代码是一个函数,它接受参数的名称 ($param_name) 和期望在其中找到的 HTTP 请求类型(GET 或 POST),然后查看当前的($_GET$_POST)和已弃用($HTTP_GET_VARS$HTTP_POST_VARS)请求变量数组以获取与该名称匹配的值。在它返回之前,它会尝试从它找到的值中去除多余的斜线。

    例如,如果我通过了这个 HTTP 请求:

    http://www.example.com/explain_function.php?key=value

    然后运行函数

    get_param("key", "GET");

    它会返回“值”。

    【讨论】:

      【解决方案5】:

      似乎正在尝试根据参数名称从查询字符串中提取值。它首先检查 $_POST 变量是否有效,如果不是,检查 $HTTP_POST_VARS。如果其中任何一个有效,它将返回名称为 $param_name 的值。例如,如果 $param_name = "foo",它将检查 $_POST["foo"]。

      【讨论】:

        猜你喜欢
        • 2015-05-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多