是否弃用了$ GLOBALS ['HTTP_GET_VARS']?

时间:2011-05-18 12:54:43

标签: php global deprecated

我知道$HTTP_GET_VARS的使用已被弃用,但使用$GLOBALS['HTTP_GET_VARS']会怎样?该数组密钥可能在将来消失吗?

我基本上有一个遗留项目,我需要与CMS集成,除非绝对必要,否则我真的不想更新它。

function table_manager_import_vars($var) {
   $vars = explode(",", $var);

   foreach($vars AS $var) {
       switch ($var) {
           case "G":
               $var = "HTTP_GET_VARS";
               break;
           case "P":
               $var = "HTTP_POST_VARS";
               break;
           case "C":
               $var = "HTTP_COOKIE_VARS";
               break;
           case "S":
               $var = "HTTP_SESSION_VARS";
               //session_start();
               break;
           case "E":
               $var = "HTTP_SERVER_VARS";
               break;
       }
       if (isset($GLOBALS[$var])) {
           if (is_array($GLOBALS[$var])) {
               foreach($GLOBALS[$var] AS $var1 => $value) {
                   if ($var1 != $var) {
                       $GLOBALS[$var1] = $value;
                   }
               }
           }
       }
   }
}
// called like this
table_manager_import_vars("G,P,C,S,E");

是的,你猜对于项目的每个方面都有这样的功能,每次都有不同的名字!!

3 个答案:

答案 0 :(得分:11)

你的问题:

  

是否弃用了$ GLOBALS ['HTTP_GET_VARS']?

答案:

是的。

http://www.php.net/manual/en/reserved.variables.get.php

此页明确指出已弃用$HTTP_GET_VARS,您应该使用$_GET

$HTTP_GET_VARS$GLOBALS['HTTP_GET_VARS']相同。因此,它也被弃用了。 (请注意,可以使用$GLOBALS['variablename']

引用在全局范围内定义的所有变量

顺便说一句:在处理使用$HTTP_GET_VARS的遗留代码时,我知道你说如果可以避免更改代码就要避免更改代码,但是值得指出这个时代的代码在现代PHP安装中运行时可能会遇到大问题,因为旧版本的PHP会假设magic_quotes正在使用。如果您在较新版本的PHP中运行相同的代码,则不会magic_quotes,因此您应该确保数据已正确转义。

查看您所拥有的整个代码,看起来它正在尝试将各种HTTP_***_VARS数组中的所有变量复制到globlal范围中。这是在真正旧版本的PHP中自动完成的功能,但由于它导致了大量安全问题而被删除。我认真地建议删除整个代码并将每个代码转换为使用$_GET代替。您可能需要google for register_globals了解更多关于为什么这是一件坏事的信息。

答案 1 :(得分:7)

$HTTP_GET_VARS$GLOBALS['HTTP_GET_VARS']是一回事。 $HTTP_GET_VARS是一个超全局,并且可以通过$GLOBALS访问超级全局(但不要 )。

此外,该代码是一个巨大的安全漏洞。

答案 2 :(得分:4)

他们是一样的。

$HTTP_GET_VARS $GLOBALS['HTTP_GET_VARS'],因此“赞成$_GET弃用”两者“。