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

超全局变量是在 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 变量的数组。

相关推荐
两个人的幸福10 天前
Windows 桌面应用自研 PHP 队列(下):完整代码与六大工程化优化
php
BingoGo12 天前
PHP 泛型之殇 泛型 RFC 提案被拒绝
后端·php
JaguarJack12 天前
PHP 泛型之殇 泛型 RFC 提案被拒绝
后端·php
用户30745969820713 天前
PHP 扩展——从入门到理解
php
鹏仔先生14 天前
拷贝漫画APP下载页PHP程序,后台带免费AI写作
php
云水一下14 天前
从零开始学 PHP 系列(一):PHP 的前世今生与开发环境搭建
开发语言·php
xingpanvip14 天前
星盘接口开发文档:本命盘接口指南
android·开发语言·css·php·lua
酉鬼女又兒14 天前
零基础入门计算机网络运输层:端到端通信核心作用、端口号分类规则、复用分用工作机制及UDP与TCP协议全方位对比详解
网络·网络协议·tcp/ip·计算机网络·考研·udp·php
dog25014 天前
不要再继续优化 TCP
网络协议·tcp/ip·php
Channing Lewis14 天前
PHP 解析 Excel 的那些坑:一次“行号错位”引发的数据丢失
开发语言·php·excel