PHP:Bug缩小到一行,无法弄明白

时间:2010-05-14 19:22:28

标签: php

所以这部分代码:

print_r($_SESSION['T']);
$T = array_values($data2);
print_r($_SESSION['T']);

输出:

Array ( [0] => NZL ) Array ( [0] => ENG [1] => NZL ) 

该行是第一次宣布$ T.据我所知,$ _SESSION ['T']没有理由获得参赛作品,这肯定会给我带来麻烦。
可能需要注意的是,在调用array_values之后,var $ T看起来像:

Array ( [0] => ENG [1] => NZL ) 

这是$ _SESSION ['T']的第二次打印显示的内容。

如果你能想出任何可能发生的原因,请告诉我,谢谢

3 个答案:

答案 0 :(得分:4)

看起来您可能已启用Register Globals

if (ini_get('register_globals')) {
    die("Register Globals is ON - This is BAD");
}
else  {
    die("Register Globals is OFF - This is GOOD");
}

这个想法是 - 使用寄存器全局变量 - 您可以使用变量$T作为$_GLOBALS['T'] ...或$_GET['T']$_POST['T']或(当然)的简写)$_SESSION['T']

如果这听起来像是一个坏主意,那是因为它已经过了,现在已经非常劝阻它被弃用,并且通常默认关闭。

答案 1 :(得分:1)

这是一个已知的错误/副作用。有关详细信息,请参阅this question。通过将register_globals设置为关闭,它应该是可排序的。

答案 2 :(得分:1)

这可能是因为您将register_globals设置为on(这非常糟糕)。 (见http://www.php.net/manual/en/security.globals.php

您应该禁用寄存器全局变量,以便SESSION / POST / GET / REQUEST / COOKIE变量不会干扰。