跳至内容

超全局变量

这篇讲 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 处理上传。记住:永远不要信任用户输入。下一篇讲 命名空间与自动加载

最后更新于