超全局变量是在 PHP 4.1.0 中引入的,并且是内置变量,可以在所有作用域中始终可用。
PHP 中的许多预定义变量都是"超全局的",这意味着它们在一个脚本的全部作用域中都可用。在函数或方法中无需执行 global $variable; 就可以访问它们。
PHP 超全局变量包括:
- $GLOBALS
 - $_SERVER
 - $_REQUEST
 - $_POST
 - $_GET
 - $_FILES
 - $_ENV
 - $_COOKIE
 - $_SESSION
本篇文章将记录一些超全局变量的学习过程,其余部分将在后面的篇章中说明。 
一、$GLOBALS
$GLOBALS 是一个包含所有全局变量的数组,数组的键就是变量的名字。
            
            
              php
              
              
            
          
          function test() {
  $foo = "局部变量";
  echo '$foo在全局作用域中的值:' . $GLOBALS["foo"] . "<br>";
  echo '$foo在当前作用域中的值:' . $foo . "<br>";
}
$foo = "全局变量";
test();
        输出
            
            
              php
              
              
            
          
          $foo在全局作用域中的值:全局变量
$foo在当前作用域中的值:局部变量
        二、$_SERVER
$_SERVER 是一个包含了诸如头信息(header)、路径(path)、以及脚本位置(script locations)等信息的数组。这个数组中的条目由 Web 服务器创建,所以不能保证每个 Web 服务器都提供全部条目;服务器可能会忽略一些,或者提供此处没有列举出来的其它内容。
下表列出了 $_SERVER 中重要的元素:
|-----------------------------------|-----------------------------------------------|
| 元素/代码                             | 描述                                            |
| _SERVER\['PHP_SELF'\]            | 返回当前执行脚本的文件名。                                 |
| _SERVER['GATEWAY_INTERFACE']   | 返回服务器使用的 Common Gateway Interface (CGI) 的版本。  |
| _SERVER\['SERVER_ADDR'\]         | 返回主机服务器的 IP 地址。                               |
| _SERVER['SERVER_NAME']         | 返回主机服务器的名称(如 www.w3school.com.cn)。            |
| _SERVER\['SERVER_SOFTWARE'\]     | 返回服务器标识字符串(如 Apache/2.2.24)。                  |
| _SERVER['SERVER_PROTOCOL']     | 返回信息协议的名称和修订号(如 HTTP/1.1)。                    |
| _SERVER\['REQUEST_METHOD'\]      | 返回用于访问页面的请求方法(如 POST)。                        |
| _SERVER['REQUEST_TIME']        | 返回请求开始的时间戳(如 1377687496)。                     |
| _SERVER\['QUERY_STRING'\]        | 如果页面是通过查询字符串访问的,则返回查询字符串。                     |
| _SERVER['HTTP_ACCEPT']         | 返回当前请求的 Accept 头。                             |
| _SERVER\['HTTP_ACCEPT_CHARSET'\] | 返回当前请求的 Accept_Charset 头(如 utf-8,ISO-8859-1)。 |
| _SERVER['HTTP_HOST']           | 返回当前请求的 Host 头。                               |
| _SERVER\['HTTP_REFERER'\]        | 返回当前页面的完整 URL(不可靠,因为不是所有用户代理都支持它)。            |
| _SERVER['HTTPS']               | 脚本是否通过安全的 HTTP 协议查询。                          |
| _SERVER\['REMOTE_ADDR'\]         | 返回用户查看当前页面的 IP 地址。                            |
| _SERVER['REMOTE_HOST']         | 返回用户查看当前页面的主机名。                               |
| _SERVER\['REMOTE_PORT'\]         | 返回用户在机器上用于与 Web 服务器通信的端口。                     |
| _SERVER['SCRIPT_FILENAME']     | 返回当前执行脚本的绝对路径名。                               |
| _SERVER\['SERVER_ADMIN'\]        | 返回在 Web 服务器配置文件中为 SERVER_ADMIN 指令给定的值。        |
| _SERVER['SERVER_PORT']         | 返回服务器上 Web 服务器用于通信的端口(如 80)。                  |
| _SERVER\['SERVER_SIGNATURE'\]    | 返回添加到服务器生成页面的服务器版本和虚拟主机名。                     |
| _SERVER['PATH_TRANSLATED']     | 返回当前脚本基于文件系统的路径。                              |
| _SERVER\['SCRIPT_NAME'\]         | 返回当前脚本的路径。                                    |
| _SERVER['SCRIPT_URI']          | 返回当前页面的 URI。                                  |
示例
            
            
              php
              
              
            
          
          echo $_SERVER["SERVER_NAME"] . "<br>";
echo $_SERVER["HTTP_HOST"] . "<br>";
echo $_SERVER["SCRIPT_NAME"] . "<br>";
        三、$_REQUEST
**_REQUEST** 是 PHP 的一个超全局变量,它包含了提交的表单数据和所有的 cookie 数据,默认情况下包含了 _GET,_POST 和 _COOKIE 的数组。也就是说,我们可以通过 $_REQUEST 关键字加上表单字段或 cookie 的名称来访问这些数据。
接下来我们创建一个 HTML 的表单,然后使用 $_REQUEST 来获取表单提交的数据,然后将获取到的表单数据显示在页面上。
            
            
              php
              
              
            
          
          <html>
  <body>
    <form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">
      名字:<input type="text" name="username" />
      <input type="submit" />
    </form>
    <?php
    if ($_SERVER["REQUEST_METHOD"] == "POST") {
      $name = htmlspecialchars($_REQUEST["username"]);
      if (!empty($name)) {
        echo "<h1>名字是:$name</h1>";
      }
    }
    ?>
  </body>
</html>
        四、$_POST
当 HTTP POST 请求的 Content-Type 是 application/x-www-form-urlencoded(表单数据以键值对的形式编码并发送到服务器。它是 HTML 表单默认的编码方式。) 或 multipart/form-data(用于在 Web 表单中上传文件或提交包含二进制数据的表单。它允许在单个 HTTP 请求中发送多个不同类型的数据(如文本字段和文件)。) 时,会将变量以关联数组形式传入当前脚本。
            
            
              php
              
              
            
          
          <html>
  <body>
    <form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">
      名字:<input type="text" name="username" />
      <input type="submit" />
    </form>
    <?php
    if ($_SERVER["REQUEST_METHOD"] == "POST") {
      $name = htmlspecialchars($_POST["username"]);
      if (!empty($name)) {
        echo "<h1>名字是:$name</h1>";
      }
    }
    ?>
  </body>
</html>
        五、$_GET
通过 URL 参数(又叫查询字符串)传递给当前脚本的变量的数组。注意:该数组不仅仅对表单 method 为 GET 的请求生效,而是会针对所有带 查询字符串 的请求。
            
            
              html
              
              
            
          
          <a href="demo_get.php?name=Hello">测试 $_GET</a>
        demo_get.php
            
            
              php
              
              
            
          
          <?php
echo "<h1>" . $_GET["name"] . "</h1>";
        六、其它超全局变量
其它的超全局变量在这里只做简单的说明,具体的使用会在后续的篇章中给出。
$_FILES --- HTTP 文件上传变量:通过 HTTP POST 方式上传到当前脚本的项目的数组。
_ENV --- 环境变量:通过环境方式传递给当前脚本的变量的数组。这些变量被从 PHP 解析器的运行环境导入到 PHP 的全局命名空间。很多是由支持 PHP 运行的 Shell 提供的,并且不同的系统很可能运行着不同种类的 Shell,所以 _ENV 数组中的内容是和当前运行环境相关的。
$_COOKIE --- HTTP Cookies:通过 HTTP Cookies 方式传递给当前脚本的变量的数组。
$_SESSION --- Session 变量:当前脚本可用 SESSION 变量的数组。