PHP 超全局变量

在PHP中,有几个预定义的变量,它们在脚本的任何地方都可以访问。这些变量被称为“超全局变量”(Superglobals)。下面是一个详细教程,介绍了PHP的超全局变量及其使用方法。

1. $GLOBALS - 访问全局作用域中的全局变量

$GLOBALS是一个包含所有全局变量的关联数组。数组的键名是变量的名字,值是变量的内容。可以通过下标来访问或修改这些变量。

示例:

$x = 75;
$y = 25;

function addition() {
    $GLOBALS['z'] = $GLOBALS['x'] + $GLOBALS['y'];
}

addition();
echo $z; // 输出100

在这个例子中,函数addition()访问了全局变量$x$y,并将它们的值相加后赋给了另一个全局变量$z

2. $_SERVER - 服务器和执行环境信息

$_SERVER是一个包含诸如头信息(header)、路径(path)以及脚本位置(script locations)等信息的数组。这个变量可用于获取当前页面的地址,或者用户的IP地址等信息。

示例:

echo $_SERVER['PHP_SELF']; // 输出当前脚本文件名
echo $_SERVER['SERVER_NAME']; // 输出服务器主机名称
echo $_SERVER['HTTP_USER_AGENT']; // 返回访问者的用户代理头信息

3. $_REQUEST - HTTP请求变量

$_REQUEST用于收集HTML表单提交的数据。包含了$_GET, $_POST$_COOKIE的内容。可以通过索引来获取表单中对应元素的值。

示例:

<form method="post">
    <input type="text" name="fname">
    <input type="submit">
</form>

<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    // collect value of input field
    $name = $_REQUEST['fname'];
    if (empty($name)) {
        echo "Name is empty";
    } else {
        echo $name;
    }
}
?>

在这个例子中,通过表单提交的数据会被存储到$_REQUEST['fname']中。

4. $_POST - HTTP POST变量

$_POST用于收集来自方法为"POST"的HTML表单中的值。可以通过索引来获取对应元素的值。

示例:

<form method="post">
    <input type="text" name="fname">
    <input type="submit">
</form>

<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    // collect value of input field
    $name = $_POST['fname'];
    if (empty($name)) {
        echo "Name is empty";
    } else {
        echo $name;
    }
}
?>

在这个例子中,通过表单提交的数据会被存储到$_POST['fname']中。

5. $_GET - HTTP GET变量

$_GET用于收集来自方法为"GET"的HTML表单中的值,或者从URL中通过查询字符串传递的变量。可以通过索引来获取对应元素的值。

示例:

<a href="test_get.php?subject=PHP&web=runoob.com">Test $GET</a>
<?php
echo "Study " . $_GET['subject'] . " at " . $_GET['web'];
?>

在这个例子中,通过查询字符串传递的变量会被存储到$_GET['subject']$_GET['web']中。

6. $_FILES - HTTP文件上传变量

$_FILES是一个二维关联数组,用于收集来自HTML表单的上传文件信息。可以通过索引和属性来获取对应元素的值。

示例:

<form action="upload_file.php" method="post" enctype="multipart/form-data">
    <input type="file" name="fileToUpload" id="fileToUpload">
    <input type="submit" value="Upload Image" name="submit">
</form>
<?php
$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
    echo "The file ". htmlspecialchars(basename($_FILES["fileToUpload"]["name"])). " has been uploaded.";
} else {
    echo "Sorry, there was an error uploading your file.";
}
?>

在这个例子中,上传文件的信息会被存储到$_FILES['fileToUpload']数组中。

7. $_ENV - 环境变量

$_ENV是一个包含环境变量的关联数组。这个变量可用于获取系统或服务器的相关信息。

示例:

echo $_ENV["USER"]; // 输出当前登录用户名
echo $_ENV["HOME"]; // 输出当前用户主目录

8. $_SESSION - Session变量

$_SESSION是一个数组,用于存储和访问会话信息。可以在多个页面中共享这些数据,直到会话结束(通常发生在浏览器关闭时)。

示例:

session_start();
$_SESSION["favcolor"] = "green";
echo "Favorite color is " . $_SESSION["favcolor"]; // 输出"Favorite color is green"

在这个例子中,会话变量$_SESSION['favcolor']被设置为"green",然后在当前页面输出。

9. $_COOKIE - Cookie变量

$_COOKIE是一个数组,用于存储和访问Cookie信息。可以在多个页面中共享这些数据,直到Cookie过期或被删除。

示例:

setcookie("user", "Alex Porter", time()+3600); // 设置一个名为"user"的Cookie,值为"Alex Porter",有效期为1小时
echo $_COOKIE["user"]; // 输出Cookie的值

在这个例子中,Cookie变量$_COOKIE['user']被设置为"Alex Porter",然后在当前页面输出。