在PHP中,超全局变量是一种特殊的变量类型,它们在全部作用域中始终可用,无需使用global
关键字来访问。这些变量提供了在PHP脚本中访问和操作各种数据和环境信息的便捷方式。以下是PHP中常用的8个超全局变量的详细介绍:
1. $GLOBALS
- 描述:GLOBALS是一个包含了全局作用域中可用的全部变量的全局组合数组。在函数或方法中,可以通过GLOBALS数组来访问全局作用域中的变量。
- 用法:GLOBALS数组的键是变量名,值是对应变量的值。例如,在全局作用域中定义了一个变量‘foo
,那么在函数内部可以通过
$GLOBALS['foo']`来访问它。 - 示例:
$foo = "Example content"; function test() { echo '$foo in global scope: ' . $GLOBALS['foo'] . '<br />'; $GLOBALS['foo'] = '1111'; echo '$foo in global scope after modification: ' . $GLOBALS['foo'] . '<br />'; } test(); echo $foo; // 输出:1111
2. $_SERVER
- 描述:$_SERVER是一个包含了服务器和执行环境信息的数组。它提供了诸如头信息、路径、脚本位置以及请求方法等信息。
- 用法:SERVER数组的键是服务器提供的变量名,值是相应的信息。例如,‘_SERVER['PHP_SELF']
表示当前执行脚本的文件名,
$_SERVER['SERVER_NAME']`表示当前运行脚本所在服务器的主机名。 - 示例:
echo '当前执行脚本的文件名: ' . $_SERVER['PHP_SELF'] . '<br>'; echo '当前运行脚本所在服务器的主机名: ' . $_SERVER['SERVER_NAME'] . '<br>'; echo '当前请求的 Host 头部内容: ' . $_SERVER['HTTP_HOST'] . '<br>'; echo '当前用户代理(浏览器)的字符串: ' . $_SERVER['HTTP_USER_AGENT'] . '<br>'; echo '客户端的 IP 地址: ' . $_SERVER['REMOTE_ADDR'] . '<br>';
3. $_GET
- 描述:GET是一个关联数组,用于收集通过URL参数传递的数据。当使用GET方法发送HTTP请求时,参数会附加在URL的末尾,并通过_GET数组来访问。
- 用法:GET数组的键是URL参数的名称,值是参数的值。例如,‘_GET['id']
将返回URL中名为
id`的参数的值。 - 示例:
// 假定 URL 为 example.com/index.php?name=Alice if (isset($_GET['name'])) { $name = $_GET['name']; echo "Hello, $name!"; } else { echo "Name parameter is not set"; }
4. $_POST
- 描述:POST也是一个关联数组,用于收集通过POST方法提交的表单数据。与_GET不同,$_POST方法将用户输入的数据发送到服务器,但不会在URL中显示这些数据。
- 用法:POST数组的键是表单元素的名称,值是用户输入的数据。例如,‘_POST['name']`将返回提交的名称值。
- 示例:
<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>"> Name: <input type="text" name="name"><br> <input type="submit"> </form> <?php if ($_SERVER["REQUEST_METHOD"] == "POST") { $name = $_POST['name']; if (empty($name)) { echo "Name is empty"; } else { echo "Hello, $name!"; } } ?>
5. $_FILES
- 描述:$_FILES是一个关联数组,用于访问通过HTTP POST方法上传的文件。它包含了上传文件的属性,如文件名、文件类型、文件大小等。
- 用法:FILES数组的键是表单中‘<inputtype="file">‘元素的名称,值是一个包含了文件信息的数组。例如,‘_FILES['file']['name']`将返回上传文件的名称。
- 示例:
<form method="post" enctype="multipart/form-data" action="<?php echo $_SERVER['PHP_SELF']; ?>"> Select file to upload: <input type="file" name="file"><br> <input type="submit" value="Upload File"> </form> <?php if ($_SERVER["REQUEST_METHOD"] == "POST") { $target_dir = "uploads/"; $target_file = $target_dir . basename($_FILES["file"]["name"]); if (move_uploaded_file($_FILES["file"]["tmp_name"], $target_file)) { echo "The file ". htmlspecialchars( basename( $_FILES["file"]["name"])). " has been uploaded."; } else { echo "Sorry, there was an error uploading your file."; } } ?>
6. $_COOKIE
- 描述:$_COOKIE是一个关联数组,包含了客户端发送的HTTP Cookie的值。Cookie是一种在客户端浏览器中存储数据的机制,用于跟踪用户状态和存储用户偏好设置。
- 用法:COOKIE数组的键是Cookie的名称,值是Cookie的值。例如,‘_COOKIE['username']
将返回存储在名为
username`的Cookie中的值。 - 设置Cookie:在PHP中,可以使用
setcookie()
函数来设置Cookie。
7. $_SESSION
- 描述:$_SESSION是一个关联数组,用于在不同页面之间存储和访问会话数据。它可以用来跟踪用户会话状态,存储用户信息,以及实现用户登录和注销等功能。
- 用法:在PHP脚本中,首先需要调用
session_start()
函数来启动会话,然后才能使用SESSION数组来存储和访问会话数据。例如,‘_SESSION['username']`可以存储当前登录用户的用户名。 - 示例:
session_start(); $_SESSION['username'] = 'JohnDoe'; // 在另一个页面中访问会话数据 session_start(); echo 'Hello, ' . $_SESSION['username'];
8. $_REQUEST
- 描述:$_REQUEST是一个关联数组,包含了通过GET、POST和COOKIE方式提交的参数的值。它可以同时获取GET和POST的参数值,但不建议在生产环境中使用,因为它可能会引入安全风险。
- 用法:REQUEST数组的键是参数的名称,值是参数的值。例如,‘_REQUEST['name']
将返回通过GET或POST方式提交的名为
name`的参数的值。 - 注意事项:由于REQUEST可以获取多种来源的参数,因此在使用之前需要注意安全性和数据一致性。在生产环境中,建议明确使用_GET、POST或_COOKIE来访问特定的参数。
总结
以上介绍了PHP中常用的8个超全局变量,包括GLOBALS、_SERVER、GET、_POST、FILES、_COOKIE、SESSION和_REQUEST。这些变量在PHP脚本中提供了丰富的功能,用于访问和操作各种数据和环境信息。在使用这些变量时,需要注意安全性和数据验证,以确保应用程序的安全性和可靠性。