PHP 数组排序
PHP 超级全局变量
关键点:
- PHP 超级全局变量是在 PHP 4.1.0 及以后版本中引入的内置变量,可在脚本的全部作用域中直接访问。
- 包括 GLOBALS、GLOBALS、_SERVER、REQUEST、REQUEST、_POST、GET、GET、_FILES、ENV、ENV、_COOKIE、$_SESSION 等 9 个常用变量。
- 研究表明,这些变量用于处理表单数据、服务器信息、会话管理等,需注意版本差异和使用限制。
什么是 PHP 超级全局变量?
PHP 超级全局变量是 PHP 系统自带的变量,它们在脚本的任何作用域(如函数、类或文件)中都可用,无需特别声明即可访问。它们主要用于存储和访问全局数据,如表单提交数据、服务器环境信息、会话状态等,方便开发者在不同上下文中使用。
常用超级全局变量及其用途
以下是常见的超级全局变量及其简要说明:
- $GLOBALS:包含所有全局变量,键为变量名,可在函数中访问全局变量。
- $_SERVER:存储服务器和执行环境信息,如脚本路径、主机名等。
- $_REQUEST:收集 GET、POST 和 COOKIE 数据,适合处理表单提交。
- $_POST:收集通过 POST 方法提交的表单数据。
- $_GET:收集通过 GET 方法或 URL 参数的数据。
- $_FILES:处理文件上传信息,包括文件名、大小等。
- $_ENV:包含服务器环境变量,系统相关。
- $_COOKIE:管理 cookie 数据,用于存储用户偏好。
- $_SESSION:存储会话信息,需要先调用
session_start()
。
使用示例
以下是一个简单的 $_GET 示例:
<a href="test.php?subject=PHP&web=runoob.com">测试</a>
在 test.php
中:
<?php echo "学习 " . $_GET['subject'] . " 在 " . $_GET['web']; ?>
注意事项
- 超级全局变量的可用性可能受
variables_order
指令影响。 - 在 PHP 5.4 及以上版本,将超级全局变量用作函数参数会导致致命错误。
- 建议参考官方文档以了解更多细节和版本差异。
详细报告:PHP 超级全局变量全面解析
本文将全面讲解 PHP 超级全局变量的定义、类型、使用方法、示例以及注意事项,旨在为学习者提供系统化的中文讲解。以下内容基于权威资源和实践经验,适合不同水平的 PHP 开发者。
1. PHP 超级全局变量概述
PHP 超级全局变量是在 PHP 4.1.0 及以后版本中引入的特殊变量,它们在 PHP 脚本的全部作用域中都可用,无需使用 global
关键字即可在函数或类中访问。这些变量是 PHP 系统内置的,用于存储和访问各种类型的全局数据,如表单数据、服务器信息、会话数据等。它们的特性是始终可用,并且可以在任何作用域(如函数、类或文件)中直接访问。
2. 超级全局变量的可用性与限制
- 可用性:超级全局变量默认在所有作用域中可用,但其可用性可能受
variables_order
指令的影响。详见 PHP 官方手册 – variables_order。 - 使用限制:超级全局变量不能用作变量变量(variable variables)在函数或类方法中。例如,不能在函数参数中使用
function test($_GET) { ... }
,否则会导致错误。 - PHP 版本注意:在 PHP 5.4 及以上版本中,将超级全局变量用作函数参数会导致致命错误,因为这会“遮蔽”超级全局变量。例如:
- 错误示例:
function test($_GET) { // 会导致致命错误 }
- 错误信息:
Fatal error: Cannot re-assign auto-global variable _GET in...
- 错误示例:
3. 常用超级全局变量列表
以下是 PHP 中常用的 9 个超级全局变量及其详细描述:
变量名 | 描述 | 示例用例/注意事项 |
---|---|---|
$GLOBALS | 包含所有全局变量的数组,键为变量名,可在函数中访问全局变量。 | 函数 addition() 使用 $GLOBALS['x'] + $GLOBALS['y'] ,输出结果。 |
$_SERVER | 存储服务器和执行环境信息,如脚本路径、主机名等,常见字段见下表。 | 输出 $_SERVER['PHP_SELF'] 获取当前脚本文件名。 |
$_REQUEST | 收集 GET、POST 和 COOKIE 数据,适合处理表单提交。 | 使用 $_REQUEST['fname'] 获取表单输入。 |
$_POST | 收集通过 POST 方法提交的表单数据。 | 表单提交,使用 $_POST['fname'] 获取输入。 |
$_GET | 收集通过 GET 方法或 URL 参数的数据。 | URL 如 test.php?subject=PHP ,使用 $_GET['subject'] 获取值。 |
$_FILES | 处理文件上传信息,是一个二维数组,包含 name 、type 、size 等元素。 | 检查文件大小和类型,移动上传文件到指定目录。 |
$_ENV | 包含服务器环境变量,系统依赖。 | 使用 var_dump($_ENV) 输出环境变量。 |
$_COOKIE | 管理 cookie 数据,通过 setcookie() 创建,通过 $_COOKIE 获取。 | 创建 cookie “user”,检查 isset($_COOKIE["user"]) 是否存在。 |
$_SESSION | 存储会话信息,需要在 <html> 标签前调用 session_start() 。 | 存储视图计数器,使用 unset() 或 session_destroy() 结束会话。 |
$_SERVER 常见字段:
元素名 | 描述 |
---|---|
PHP_SELF | 返回当前脚本文件名 |
GATEWAY_INTERFACE | 返回 CGI 规范版本 |
SERVER_ADDR | 返回服务器 IP 地址 |
SERVER_NAME | 返回服务器主机名(如 www.runoob.com) |
SERVER_SOFTWARE | 返回服务器标识(如 Apache/2.2.24) |
SERVER_PROTOCOL | 返回协议名称/版本(如 HTTP/1.0) |
REQUEST_METHOD | 返回请求方法(如 POST) |
REQUEST_TIME | 返回请求开始时间戳(如 1577687494) |
QUERY_STRING | 返回查询字符串(如 via query string) |
HTTP_ACCEPT | 返回当前请求的请求头 |
HTTP_ACCEPT_CHARSET | 返回 Accept_Charset 头(如 utf-8) |
HTTP_HOST | 返回 Host 头 |
HTTP_REFERER | 返回引荐页的完整 URL(不可靠) |
HTTPS | 是否通过安全 HTTP 查询 |
REMOTE_ADDR | 返回用户 IP 地址 |
REMOTE_HOST | 返回用户主机名 |
REMOTE_PORT | 返回用户连接使用的端口 |
SCRIPT_FILENAME | 返回当前脚本的绝对路径 |
SERVER_ADMIN | 返回 Apache SERVER_ADMIN 参数 |
SERVER_PORT | 返回 Web 服务器端口(默认 80) |
SERVER_SIGNATURE | 返回服务器版本和虚拟主机名 |
PATH_TRANSLATED | 返回当前脚本在文件系统中的基础路径 |
SCRIPT_NAME | 返回当前脚本路径 |
SCRIPT_URI | 返回当前页面 URI |
4. 使用示例与实践
以下是几个典型示例,展示不同超级全局变量的使用:
4.1 $GLOBALS 示例
<?php
$x = 75;
$y = 25;
function addition() {
$GLOBALS['z'] = $GLOBALS['x'] + $GLOBALS['y'];
}
addition();
echo $z; // 输出 100
?>
4.2 $_SERVER 示例
<?php
echo $_SERVER['PHP_SELF']; // 输出当前脚本文件名
echo "<br>";
echo $_SERVER['SERVER_NAME']; // 输出服务器主机名
?>
4.3 $_GET 示例
<html>
<body>
<a href="test_get.php?subject=PHP&web=runoob.com">测试</a>
</body>
</html>
在 test_get.php
中:
<?php
echo "学习 " . $_GET['subject'] . " 在 " . $_GET['web'];
?>
4.4 $_FILES 示例
<?php
if ($_FILES["file"]["size"] < 20000) {
if ($_FILES["file"]["error"] > 0) {
echo "错误: " . $_FILES["file"]["error"] . "<br>";
} else {
echo "上传: " . $_FILES["file"]["name"] . "<br>";
echo "类型: " . $_FILES["file"]["type"] . "<br>";
echo "大小: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
echo "存储在: " . $_FILES["file"]["tmp_name"];
}
} else {
echo "文件大小无效。";
}
?>
4.5 $_SESSION 示例
<?php
session_start();
if (isset($_SESSION['views'])) {
$_SESSION['views'] = $_SESSION['views'] + 1;
} else {
$_SESSION['views'] = 1;
}
echo "浏览次数: " . $_SESSION['views'];
?>
5. 注意事项与最佳实践
- 备份数据:超级全局变量直接操作原始数据,建议在修改前备份。
- 性能优化:对于大型数据,尽量避免频繁访问 $_SESSION,影响性能。
- 安全考虑:处理 $_GET 和 $_POST 数据时,需进行输入验证和过滤,防止 XSS 和 SQL 注入。
- 版本兼容:注意 PHP 版本差异,尤其是在使用 $_GET 等变量作为函数参数时。
6. 常见误区
- 误以为所有超级全局变量都包含所有数据:$_REQUEST 仅包含 GET、POST 和 COOKIE 数据。
- 忽略 session_start():$_SESSION 使用前必须调用,否则会导致未定义错误。
- 直接输出 $_SERVER 数据:某些字段如 HTTP_REFERER 不可靠,需谨慎使用。
7. 参考资源
以下是中文资源,提供更详细的 PHP 超级全局变量讲解:
- 菜鸟教程:PHP 超级全局变量
- CSDN:PHP 全局变量 – 9 个超全局变量详解与用法示例
- PHP 官方手册:超全局变量
- W3School:PHP 超级全局变量
这些资源涵盖基础到高级的知识,适合初学者和有经验的开发者参考。
8. 总结
PHP 超级全局变量功能强大,提供了便捷的全局数据访问方式。从表单数据处理到会话管理,开发者可以根据需求选择合适的变量。注意版本差异、使用限制和安全问题,可以有效提升代码质量。建议结合官方文档和示例进行实践,以掌握更多技巧。