POST变量出现在PHP符号表中

时间:2011-02-20 09:00:17

标签: php

我发现我的POST变量在我的脚本中被指定为变量。

这种行为对我来说似乎不对。 $ _POST和$ _GET的元素作为提取的变量出现在符号表中,而我没有明确地设置它们。

以下示例显示了我的意思。使用

调用脚本
  

http://localhost/test_script.php?select=1

并且已经设置了变量$ select,并且在脚本执行时在符号表中。对此有解释吗?我以为我必须提取($ _ POST)或明确设置变量,例如$ select = $ _POST ['select'];

这是脚本:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>                     
<?php 
echo "<pre>"; 
print_r(array_keys(get_defined_vars())); 
echo "</pre>"; 
echo "\$select = $select";  
die; ?>  

结果如下:

Array
(
    [0] => GLOBALS
    [1] => _ENV
...
    [31] => select
...
    [59] => argv
    [60] => argc
    [61] => _POST
    [62] => _GET
    [63] => _COOKIE
    [64] => _SERVER
    [65] => _FILES
    [66] => _REQUEST
)
$select = 1

PHP版本是5.2.9-1

ARGHH!刚刚解决了我自己的问题。在php.ini中将register_globals指令设置为“On”。我已经禁用它,因为它应该是。我会把这个留在这里以防其他人注意到同样的问题。

干杯 杰夫

1 个答案:

答案 0 :(得分:2)

是否启用了Register_globals?如果是,那么你真的应该考虑将其关闭,因为它可能导致混乱,但更重要的是,这是一个可怕的安全风险。