PHP 入门教程
PHP 超级全局变量
本教程共 65 篇 · 第 15 篇 · 更新于 2026-07-24 · 约 4 分钟阅读
PHPPHP8超级全局变量$_GET$_POST$_SERVER
15. PHP 超级全局变量
本节目标:掌握 PHP 内置的超级全局变量。学完你能获取服务器信息、用户请求数据和环境配置。
15.1 什么是超级全局变量
超级全局变量在 PHP 脚本的任何作用域都可用。不需要用 global 声明,在函数内直接使用。
PHP 提供了以下超级全局变量:
| 变量 | 说明 |
|---|---|
$GLOBALS | 包含所有全局变量的数组 |
$_SERVER | 服务器和执行环境信息 |
$_GET | URL 查询参数 |
$_POST | HTTP POST 请求数据 |
$_REQUEST | $_GET、$_POST 和 $_COOKIE 的合集 |
$_FILES | 上传文件信息 |
$_COOKIE | HTTP 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 官方文档,综合改写后所得。