PHP语法基础篇(八):超全局变量

发布于:2025-07-05 ⋅ 阅读:(20) ⋅ 点赞:(0)
超全局变量是在 PHP 4.1.0 中引入的,并且是内置变量,可以在所有作用域中始终可用。
PHP 中的许多预定义变量都是"超全局的",这意味着它们在一个脚本的全部作用域中都可用。在函数或方法中无需执行 global $variable; 就可以访问它们。
PHP 超全局变量包括:
  • $GLOBALS
  • $_SERVER
  • $_REQUEST
  • $_POST
  • $_GET
  • $_FILES
  • $_ENV
  • $_COOKIE
  • $_SESSION
本篇文章将记录一些超全局变量的学习过程,其余部分将在后面的篇章中说明。

一、$GLOBALS

$GLOBALS 是一个包含所有全局变量的数组,数组的键就是变量的名字。

function test() {
  $foo = "局部变量";

  echo '$foo在全局作用域中的值:' . $GLOBALS["foo"] . "<br>";
  echo '$foo在当前作用域中的值:' . $foo . "<br>";
}

$foo = "全局变量";
test();

输出

$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。

示例 

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 来获取表单提交的数据,然后将获取到的表单数据显示在页面上。

<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 请求中发送多个不同类型的数据(如文本字段和文件)。) 时,会将变量以关联数组形式传入当前脚本。

<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 的请求生效,而是会针对所有带 查询字符串 的请求。

<a href="demo_get.php?name=Hello">测试 $_GET</a>

demo_get.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 变量的数组。