首页 / PHP 入门教程 / PHP 超级全局变量

PHP 入门教程

PHP 超级全局变量

本教程共 65 篇 · 第 15 篇 · 更新于 2026-07-24 · 约 4 分钟阅读

PHPPHP8超级全局变量$_GET$_POST$_SERVER

15. PHP 超级全局变量

本节目标:掌握 PHP 内置的超级全局变量。学完你能获取服务器信息、用户请求数据和环境配置。

15.1 什么是超级全局变量

超级全局变量在 PHP 脚本的任何作用域都可用。不需要用 global 声明,在函数内直接使用。

PHP 提供了以下超级全局变量:

变量说明
$GLOBALS包含所有全局变量的数组
$_SERVER服务器和执行环境信息
$_GETURL 查询参数
$_POSTHTTP POST 请求数据
$_REQUEST$_GET$_POST$_COOKIE 的合集
$_FILES上传文件信息
$_COOKIEHTTP Cookie
$_SESSION会话数据
$_ENV环境变量

15.2 $GLOBALS

$GLOBALS 是一个包含所有全局变量的关联数组:

<?php
$x = 10;
$y = 20;

function add() {
    // 在函数内访问全局变量
    $GLOBALS['z'] = $GLOBALS['x'] + $GLOBALS['y'];
}

add();
echo $z;  // 30
?>
Tip

虽然 $GLOBALS 可以访问全局变量,但更推荐通过参数传递或使用依赖注入,代码更易测试和维护。

15.3 $_SERVER

$_SERVER 包含服务器和请求的相关信息:

<?php
// 常用 $_SERVER 元素
echo $_SERVER['PHP_SELF'];        // 当前脚本路径,如 /index.php
echo $_SERVER['SERVER_NAME'];     // 服务器主机名
echo $_SERVER['REQUEST_METHOD'];  // 请求方法:GET / POST / PUT 等
echo $_SERVER['QUERY_STRING'];    // URL 查询字符串
echo $_SERVER['REMOTE_ADDR'];     // 访问者 IP 地址
echo $_SERVER['HTTP_USER_AGENT']; // 浏览器标识
echo $_SERVER['SCRIPT_FILENAME']; // 当前脚本的绝对路径
?>
<?php
// 判断请求方式
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    echo "这是 POST 请求";
} else {
    echo "这是 GET 请求";
}

// 获取当前 URL(不含查询参数)
$url = $_SERVER['REQUEST_SCHEME'] . '://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
echo $url;
?>
Note

$_SERVER 中的部分元素由 Web 服务器提供,不同服务器可能略有差异。

15.4 $_GET

$_GET 获取 URL 中的查询参数:

<?php
// URL: http://example.com/page.php?name=张三&age=25

echo $_GET['name'];  // 张三
echo $_GET['age'];   // 25

// 安全获取:先判断是否存在
$name = $_GET['name'] ?? '匿名';  // PHP 7.0+

// 处理数组参数
// URL: page.php?tags[]=php&tags[]=web
$tags = $_GET['tags'] ?? [];  // ["php", "web"]
?>
<?php
// 生成带参数的 URL
$params = http_build_query([
    'name' => '张三',
    'age' => 25
]);
// name=%E5%BC%A0%E4%B8%89&age=25
echo "<a href=\"page.php?$params\">链接</a>";
?>
Warning

$_GET 的数据来自用户输入,永远不要直接输出到页面,必须进行过滤和转义,防止 XSS 攻击。

15.5 $_POST

$_POST 获取表单 POST 提交的数据:

<?php
// HTML 表单提交到本页面
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $username = $_POST['username'] ?? '';
    $password = $_POST['password'] ?? '';
    
    echo "用户名: " . htmlspecialchars($username);
}
?>

<!-- 简单表单 -->
<form method="post" action="">
    <input type="text" name="username" placeholder="用户名">
    <input type="password" name="password" placeholder="密码">
    <button type="submit">提交</button>
</form>
Note

htmlspecialchars() 将特殊字符转为 HTML 实体,是防止 XSS 的基础手段。

15.6 $_REQUEST

$_REQUEST$_GET$_POST$_COOKIE 的合集:

<?php
// 不确定数据来自 GET 还是 POST 时可用
$name = $_REQUEST['name'] ?? '';
?>
Tip

不建议使用 $_REQUEST,因为它来源不明确,不利于代码可读性和安全性。明确使用 $_GET$_POST 更好。

15.7 $_ENV

$_ENV 包含操作系统环境变量:

<?php
// 读取环境变量
echo $_ENV['PATH'] ?? '未设置';

// 或使用 getenv()
echo getenv('HOME') ?: '未设置';

// 检查是否生产环境
$env = $_ENV['APP_ENV'] ?? 'development';
if ($env === 'production') {
    echo "生产环境";
}
?>
Note

现代 PHP 应用(如 Laravel、Symfony)通常使用 .env 文件管理配置,配合 $_ENV 读取。

15.8 安全使用建议

<?php
// 1. 始终检查变量是否存在
$page = isset($_GET['page']) ? (int)$_GET['page'] : 1;

// 2. 或更简洁的写法
$page = (int) ($_GET['page'] ?? 1);

// 3. 输出到页面必须转义
echo htmlspecialchars($_GET['keyword'] ?? '', ENT_QUOTES, 'UTF-8');

// 4. 验证输入类型
$id = filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT);
if ($id === false || $id === null) {
    die("无效 ID");
}
?>

来源:参考了 w3cschool「PHP 超级全局变量」、runoob「PHP 超级全局变量」「PHP $_GET 变量」「PHP $_POST 变量」以及 php.net 官方文档,综合改写后所得。