3

我试图通过 GET 参数获取超全局变量的名称。我被告知在 get 请求中只传递_VAR_NAME(不带$),所以在程序中我必须通过变量 variable: 来访问它$$_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在...

4

4 回答 4

2

我不确定你为什么需要这个,我不使用可变变量(通常有更好的方法)。

你可以根据你的 $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";
}
于 2011-03-08T17:13:00.800 回答
2

启用指令后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'
于 2016-11-01T22:28:46.073 回答
1

您可以尝试替代语法:

$var = $GLOBALS["_SERVER"];
print_r($var);

这在功能上等同于$$varvar.

要检查的更关键的一件事是它$_SERVER本身是否存在。count($_SERVER);(如果不是,请在脚本开头放置一个空表达式。)

如果variables_order=php.ini_

于 2011-03-08T17:35:24.883 回答
0

它对我来说非常适合。你试过 print_r ($_SERVER)

它可能未在您的系统上填充。

确保您没有在脚本中的某处取消设置它。


你是在函数还是类中使用它?

警告指出,这不能用于函数或类中的超全局变量。

你最好的选择是 switch 语句。

于 2011-03-08T17:21:34.923 回答