在变量变量(PHP)中使用$ _SERVER时出错

我试图通过GET参数获取超全局变量的名称。我被告知在get请求中只传递
_VAR_NAME
(没有
$
),因此在程序中我必须通过变量变量访问它:
$$_GET['parameter_name']
。 一切都很顺利,除了
$_SERVER
。为了尝试什么是错的,我只是做了一个小的PHP脚本来测试发生了什么。这是代码:
<?php
    // ¡¡ This does not work !!
        $nombre = "_SERVER";
        $var = $$nombre;
        print_r($var);
    // This works 
        $nombre = "_GET";
        $var = $$nombre;
        print_r($var);
?>
_SERVER
版本有什么原因不起作用吗? 我收到以下错误:   注意:未定义的变量:
_SERVER
in...     
已邀请:
您可以尝试替代语法:
$var = $GLOBALS["_SERVER"];
print_r($var);
这在功能上等同于
$$varvar
。 另一个要检查的关键是
$_SERVER
本身是否存在。 (如果没有,请在脚本的开头放置一个空的
count($_SERVER);
表达式。) 如果在
php.ini
中修改了
variables_order=
,它可能不存在(虽然它应该在最近的PHP版本中显示为空数组。)     
我不确定你为什么需要这个,我不使用变量变量(通常有更好的方法)。 您可以根据$ nombre变量进行简单的切换,没有那么多的超全局变量!
switch ($nombre) {
  case "_SERVER" : 
    print_r($_SERVER);
    break;
  case "_GET" : 
    print_r($_GET);
    break;
  case "_POST" : 
    print_r($_POST);
    break;
  // ...
  default:
    echo "Unknown variable";
}
    
它对我来说非常完美。你试过print_r吗? ($ _ SERVER) 它可能不会填充在您的系统上。 确保你没有在脚本中的任何地方取消它。 你是在函数或类中使用它吗? 警告声明这不能用于函数或类中的超全局。 你最好的选择是switch语句。     
启用
auto_globals_jit
指令时,SERVER和ENV变量在首次使用时(Just In Time)创建,而不是在脚本启动时创建。 PHP手册警告变量变量:   在编译期间检查SERVER和ENV变量的用法   所以通过例如使用它们变量变量不会导致它们   初始化。 可能的解决方案是 使用PHP函数
getenv()
而不是SERVER变量。 仅在脚本之前或之前添加行
$_SERVER;
。 禁用指令(在php.ini中:
auto_globals_jit = Off
,或在脚本内:
ini_set('auto_globals_jit',0);
) 在数组$ GLOBALS中使用键'_SERVER'(
$GLOBALS['_SERVER']
)     

要回复问题请先登录注册