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处理文件上传信息,是一个二维数组,包含 nametypesize 等元素。检查文件大小和类型,移动上传文件到指定目录。
$_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 超级全局变量讲解:

这些资源涵盖基础到高级的知识,适合初学者和有经验的开发者参考。

8. 总结

PHP 超级全局变量功能强大,提供了便捷的全局数据访问方式。从表单数据处理到会话管理,开发者可以根据需求选择合适的变量。注意版本差异、使用限制和安全问题,可以有效提升代码质量。建议结合官方文档和示例进行实践,以掌握更多技巧。

类似文章

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注