超全局变量
这篇讲 PHP 的九大超全局变量——它们在脚本的任何位置(包括函数内部)均可直接访问,是处理表单、会话、文件上传等 Web 开发核心功能的基础。
什么是超全局变量
PHP 预定义的超全局变量在脚本的全部作用域中可用。在函数或方法中无需 global $variable; 即可直接使用。
九个超全局变量一览:
| 变量 | 用途 |
|---|---|
$GLOBALS | 引用全局作用域中的所有变量 |
$_SERVER | 服务器和执行环境信息 |
$_REQUEST | 收集 $_GET、$_POST、$_COOKIE 的数据 |
$_GET | 收集 URL 查询参数和 GET 表单数据 |
$_POST | 收集 POST 表单数据 |
$_FILES | 收集文件上传数据 |
$_COOKIE | 存储和读取 Cookie |
$_SESSION | 存储和读取会话数据 |
$_ENV | 环境变量 |
$GLOBALS
存储所有全局变量的关联数组,变量名作为键。可在函数内部直接操作全局变量:
<?php
$x = 5;
$y = 10;
function sum() {
$GLOBALS['y'] = $GLOBALS['x'] + $GLOBALS['y'];
}
sum();
echo $y; // 15
?>
$_SERVER
保存服务器和执行环境的信息,是最常用的超全局变量之一。常用键:
| 键 | 说明 |
|---|---|
PHP_SELF | 当前执行脚本的文件名 |
SERVER_NAME | 服务器的主机名 |
REQUEST_METHOD | 请求方法(GET、POST 等) |
REQUEST_URI | 请求的 URI |
QUERY_STRING | 查询字符串 |
HTTP_HOST | 请求的 Host 头 |
REMOTE_ADDR | 客户端的 IP 地址 |
SCRIPT_FILENAME | 脚本的绝对路径 |
<?php
echo $_SERVER['PHP_SELF']; // /index.php
echo $_SERVER['SERVER_NAME']; // localhost
echo $_SERVER['REQUEST_METHOD']; // GET
echo $_SERVER['REMOTE_ADDR']; // 127.0.0.1
?>
\(_GET 与 \)_POST
$_GET 收集 URL 查询参数和 GET 方式提交的表单数据:
// URL: /page.php?name=PHP&page=1
<?php
echo $_GET['name']; // PHP
echo $_GET['page']; // 1
?>
$_POST 收集 POST 方式提交的表单数据,适合传输敏感或大量数据:
<?php
// 表单 method="post" 提交后
$username = $_POST['username'];
$password = $_POST['password'];
?>
$_REQUEST
默认包含 $_GET、$_POST 和 $_COOKIE 的数据。虽然方便,但安全性较低——你不知道数据来自哪里:
不建议使用
$_REQUEST。它模糊了数据来源,容易导致安全漏洞。明确用 $_GET、$_POST 或 $_COOKIE,让数据来源清晰可控。$_FILES
处理文件上传。当表单 enctype="multipart/form-data" 时,上传文件的信息通过 $_FILES 获取:
<?php
// $_FILES['file'] 包含:
// name —— 原始文件名
// type —— MIME 类型
// tmp_name —— 临时文件路径
// error —— 错误代码(0 表示成功)
// size —— 文件大小(字节)
if ($_FILES['file']['error'] === 0) {
move_uploaded_file(
$_FILES['file']['tmp_name'],
'uploads/' . $_FILES['file']['name']
);
}
?>
\(_SESSION 与 \)_COOKIE
$_SESSION 用于跨页面保持用户状态(如登录信息),数据存储在服务器端:
<?php
session_start();
$_SESSION['user_id'] = 123;
echo $_SESSION['user_id']; // 123
?>
$_COOKIE 用于读取客户端存储的小段数据。设置 Cookie 需使用 setcookie() 函数。二者详见 Session 与 Cookie。
安全第一:
$_GET、$_POST、$_REQUEST 的数据来自用户输入,永远不要直接信任。始终进行验证和过滤——输出时使用 htmlspecialchars() 防止 XSS 攻击,存入数据库时使用参数化查询防止 SQL 注入。一句话小结
超全局变量是 PHP Web 开发的基础设施:$_GET / $_POST 接收用户输入,$_SERVER 获取环境信息,$_SESSION / $_COOKIE 维持状态,$_FILES 处理上传。记住:永远不要信任用户输入。下一篇讲 命名空间与自动加载。
最后更新于