PHP 超级全局变量
PHP 中的超级全局变量是在所有作用域中自动可用的内置变量,无需使用global
关键字声明。
它们在脚本的任何地方都可以访问,包括函数和类方法内部。
✅ PHP 超级全局变量列表:
$GLOBALS
- 引用全局作用域中可用的全部变量。$_SERVER
- 包含服务器和执行环境信息。$_GET
- 收集通过 URL 参数(GET 方法)提交的数据。$_POST
- 收集通过 HTTP POST 方法提交的表单数据。$_REQUEST
- 默认包含$_GET
,$_POST
和$_COOKIE
的内容。$_FILES
- 包含通过 HTTP POST 方法上传文件的信息。$_ENV
- 包含服务器环境变量。$_COOKIE
- 包含通过 HTTP Cookies 传递的变量。$_SESSION
- 包含会话变量,用于在不同页面间保持用户数据。
PHP $GLOBALS
$GLOBALS 是 PHP 中的一个超全局变量,它包含了当前脚本中所有全局作用域中的变量。
它是一个关联数组,变量名作为键,变量值作为对应的值。
1. $GLOBALS 基本用法
下面是 $GLOBALS 的基本用法:
$a = 100;
$b = 200;
function sum() {
$GLOBALS['b'] = $GLOBALS['a'] + $GLOBALS['b'];
}
sum();
echo $b; // 输出 300
在这个例子中,我们定义了两个全局变量$a
和$b
,然后在sum()
函数中通过$GLOBALS
访问并修改了它们的值。
2. 与 global 关键字的区别
$GLOBALS
和global
关键字都可以用于访问全局变量,但工作方式不同:
$x = 100;
$y = 200;
function testGlobal() {
global $x, $y;
$y = $x + $y;
}
function testGlobals() {
$GLOBALS['y'] = $GLOBALS['x'] + $GLOBALS['y'];
}
testGlobal();
echo $y; // 输出 300
testGlobals();
echo $y; // 输出 400
global
关键字是在函数内部创建对全局变量的引用,而$GLOBALS
是直接访问全局变量数组。
PHP $_SERVER
$_SERVER 是一个包含了诸如头信息(header)、路径(path)和脚本位置(script locations)等信息的数组。
这些信息由 Web 服务器创建,不同的服务器可能会提供不同的信息。
✅ 实际应用实例:
1. 获取客户端 IP 地址:
if (isset($_SERVER['REMOTE_ADDR'])) {
$ip = $_SERVER['REMOTE_ADDR'];
echo "您的 IP 地址是: " . $ip;
}
2. 检测请求方法:
if (isset($_SERVER['REMOTE_ADDR'])) {
$ip = $_SERVER['REMOTE_ADDR'];
echo "您的 IP 地址是: " . $ip;
}
3. 获取当前页面 URL:
$url = "http://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
echo "当前 URL 是: " . $url;
4. 获取用户浏览器信息:
$browser = $_SERVER['HTTP_USER_AGENT'];
echo "您的浏览器是: " . $browser;
✅ 常用 $_SERVER 元素:
1. 服务器信息 | |
---|---|
$_SERVER['SERVER_NAME'] | 当前运行脚本所在的服务器的主机名 |
$_SERVER['SERVER_ADDR'] | 服务器 IP 地址 |
$_SERVER['SERVER_PORT'] | 服务器使用的端口 |
$_SERVER['SERVER_SOFTWARE'] | 服务器标识字符串 |
$_SERVER['SERVER_PROTOCOL'] | 请求页面时通信协议的名称和版本 |
2. 请求信息 | |
$_SERVER['REQUEST_METHOD'] | 访问页面使用的请求方法(如 GET、POST 等) |
$_SERVER['REQUEST_URI'] | URI 用来指定要访问的页面 |
$_SERVER['QUERY_STRING'] | 查询字符串(URL 中问号 ? 之后的内容) |
$_SERVER['HTTP_REFERER'] | 引导用户代理到当前页的前一页的地址 |
$_SERVER['HTTP_USER_AGENT'] | 用户代理信息(浏览器信息) |
$_SERVER['REMOTE_ADDR'] | 浏览当前页面的用户的 IP 地址 |
$_SERVER['REMOTE_PORT'] | 用户机器上连接到 Web 服务器所使用的端口号 |
3. 脚本信息 | |
$_SERVER['SCRIPT_FILENAME'] | 当前执行脚本的绝对路径 |
$_SERVER['SCRIPT_NAME'] | 包含当前脚本的路径 |
$_SERVER['PHP_SELF'] | 当前执行脚本的文件名 |
$_SERVER['DOCUMENT_ROOT'] | 当前运行脚本所在的文档根目录 |
PHP $_GET
$_GET
用于收集通过 URL 参数(查询字符串)提交到当前脚本的数据。
// 基础过滤
$name = filter_input(INPUT_GET, 'name', FILTER_SANITIZE_STRING);
// 检查参数是否存在
if (isset($_GET['page'])) {
$page = $_GET['page'];
}
// 验证数字输入
if (isset($_GET['id']) && is_numeric($_GET['id'])) {
$id = (int)$_GET['id'];
}
- URL 参数指的是 URL 中问号(
?
)后面的参数。 - 数据直接显示在 URL 中,对用户可见,不适合传递敏感信息。
- URL 有长度有限制,通常约
2000
个字符。 - 使用
$_GET
时,务必进行数据过滤和验证。
提示:你如果想学习更多关于$_POST
和$_GET
的知识,请访问我们的PHP 表单章节。
PHP $_POST
$_GET
用于收集通过 HTTP POST 方法提交的表单数据。
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// 检查字段是否存在
if (isset($_POST['username']) && isset($_POST['password'])) {
$username = htmlspecialchars($_POST['username']);
$password = $_POST['password'];
// 处理登录逻辑...
}
}
$_POST
是一个以表单字段名为键、字段值为值的关联数组。- 仅当
Content-Type
为application/x-www-form-urlencoded
或multipart/form-data
时有效。 - 应对从
$_POST
获取的数据进行验证和过滤,建议使用filter_input()
函数过滤输入。 - 对输出到 HTML 的内容使用
htmlspecialchars()
防止 XSS 攻击。
PHP $_REQUEST
$_REQUEST
用于收集通过 HTTP 请求提交到脚本的数据(包括 GET、POST 和 COOKIE 方法)。
$_REQUEST
本质上是_GET
,$_POST
和$_COOKIE
数据的合并数组。
// 处理表单提交
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// 虽然可以用 $_REQUEST,但明确知道是POST数据时,直接用$_POST更安全
$username = $_POST['username'];
}
// 获取URL参数
// 虽然可以用 $_REQUEST,但明确知道是GET参数时,直接用$_GET更清晰
$page = $_GET['page'] ?? 1;
- 避若明确知道数据来源时,应直接使用对应的
$_GET
或$_POST
来获取数据。 - 对从
$_REQUEST
获取的数据,要进行严格过滤和验证。 - 可以在
php.ini
中,通过设置只包含特定来源,提高安全性。
评论区 0
发表评论
教程介绍
PHP 通用开源服务器端脚本语言,特别适用于 Web 开发,能够嵌入 HTML 中使用。
42
章节
32
阅读
0
评论
反馈提交成功
感谢您的反馈,我们将尽快处理您的反馈